From: kramm Date: Thu, 7 Apr 2005 08:59:43 +0000 (+0000) Subject: added pre-multiplying / un-premultiplying stuff. X-Git-Tag: release-0-7-0~131 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=8d1ee53eb333a1d5bac422c3fbdf421da5f74900 added pre-multiplying / un-premultiplying stuff. --- diff --git a/lib/modules/swfbits.c b/lib/modules/swfbits.c index a24b570..409ed96 100644 --- a/lib/modules/swfbits.c +++ b/lib/modules/swfbits.c @@ -707,6 +707,17 @@ int swf_SetLosslessBitsGrayscale(TAG * t, U16 width, U16 height, U8 * bitmap) return swf_SetLosslessBitsIndexed(t, width, height, bitmap, NULL, 256); } +void swf_PreMultiplyAlpha(RGBA*data, int width, int height) +{ + int num = width*height; + int t; + for(t=0;tid = ST_DEFINEBITSLOSSLESS; } else { tag->id = ST_DEFINEBITSLOSSLESS2; - /* TODO: premultiply alpha? */ + swf_PreMultiplyAlpha(data, width, height); } num = swf_ImageGetNumberOfPaletteEntries(data, width, height, 0); if(num>1 && num<=256) { @@ -846,14 +857,13 @@ RGBA *swf_DefineLosslessBitsTagToImage(TAG * tag, int *dwidth, int *dheight) } } else { for (x = 0; x < width; x++) { - /* TODO: premultiply alpha? - dest[pos2].r = (data[pos + 1]*255)/data[pos+0]; - dest[pos2].g = (data[pos + 2]*255)/data[pos+0]; - dest[pos2].b = (data[pos + 3]*255)/data[pos+0]; - */ - dest[pos2].r = data[pos + 1]; - dest[pos2].g = data[pos + 2]; - dest[pos2].b = data[pos + 3]; + /* TODO: is un-premultiplying alpha the right thing to do? + dest[pos2].r = data[pos + 1]; + dest[pos2].g = data[pos + 2]; + dest[pos2].b = data[pos + 3];*/ + dest[pos2].r = ((int)data[pos + 1]*255)/(int)data[pos+0]; + dest[pos2].g = ((int)data[pos + 2]*255)/(int)data[pos+0]; + dest[pos2].b = ((int)data[pos + 3]*255)/(int)data[pos+0]; dest[pos2].a = data[pos + 0]; //alpha pos2++; pos += 4;