fix unpremul - broken :(

SVN revision: 26288
This commit is contained in:
Carsten Haitzler 2006-10-02 05:19:39 +00:00
parent 5eda84b66b
commit 87af70ceef
2 changed files with 10 additions and 6 deletions

View File

@ -10,8 +10,9 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
{
DATA32 a = 1 + (*data >> 24);
*data++ = (*data & 0xff000000) + (((((*data) >> 8) & 0xff) * a) & 0xff00) +
(((((*data) & 0x00ff00ff) * a) >> 8) & 0x00ff00ff);
*data++ = (*data & 0xff000000) +
(((((*data) >> 8) & 0xff) * a) & 0xff00) +
(((((*data) & 0x00ff00ff) * a) >> 8) & 0x00ff00ff);
}
}
@ -24,8 +25,11 @@ evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
{
DATA32 a = (*data >> 24);
if (a & (a < 255))
*data = ARGB_JOIN(a, (R_VAL(data) * 255) / a, (G_VAL(data) * 255) / a, (B_VAL(data) * 255) / a);
if ((a > 0) && (a < 255))
*data = ARGB_JOIN(a,
(R_VAL(data) * 255) / a,
(G_VAL(data) * 255) / a,
(B_VAL(data) * 255) / a);
data++;
}

View File

@ -18,7 +18,7 @@ save_image_png(RGBA_Image *im, const char *file, int compress, int interlace)
FILE *f;
png_structp png_ptr;
png_infop info_ptr;
DATA32 *ptr, *data;
DATA32 *ptr, *data = NULL;
int x, y, j;
png_bytep row_ptr, png_data = NULL;
png_color_8 sig_bit;
@ -128,7 +128,7 @@ save_image_png(RGBA_Image *im, const char *file, int compress, int interlace)
png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr);
if (im->flags & RGBA_IMAGE_HAS_ALPHA)
free(data);
free(data);
fclose(f);
return 1;
}