From: kramm Date: Wed, 10 Jul 2002 18:23:30 +0000 (+0000) Subject: implemented type 3 transparency. X-Git-Tag: release-0-4-1~14 X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=commitdiff_plain;h=287d3c4c457dcbe7b7dc1ddc3a63cc80cd390e71 implemented type 3 transparency. --- diff --git a/src/png2swf.c b/src/png2swf.c index 8a10871..4736939 100644 --- a/src/png2swf.c +++ b/src/png2swf.c @@ -343,6 +343,8 @@ TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int id) unsigned long int zimagedatalen=0; U8*palette = 0; int palettelen = 0; + U8*alphapalette = 0; + int alphapalettelen = 0; struct png_header header; int bypp; @@ -377,10 +379,19 @@ TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int id) if(!strncmp(tagid, "PLTE", 4)) { palette = data; palettelen = len/3; - data = 0; + data = 0; //don't free data if(VERBOSE(2)) printf("%d colors in palette\n", palettelen); } + if(!strncmp(tagid, "tRNS", 4)) { + if(header.mode == 3) { + alphapalette = data; + alphapalettelen = len; + data = 0; //don't free data + if(VERBOSE(2)) + printf("found %d alpha colors\n", alphapalettelen); + } + } if(!strncmp(tagid, "IDAT", 4)) { if(!zimagedata) { zimagedatalen = len; @@ -404,7 +415,11 @@ TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int id) } free(zimagedata); - t = swf_InsertTag(t, ST_DEFINEBITSLOSSLESS); + if(alphapalette) + t = swf_InsertTag(t, ST_DEFINEBITSLOSSLESS2); + else + t = swf_InsertTag(t, ST_DEFINEBITSLOSSLESS); + swf_SetU16(t, id); // id if(header.mode == 2) { U8*data2 = malloc(header.width*header.height*4); @@ -456,8 +471,20 @@ TAG *MovieAddFrame(SWF * swf, TAG * t, char *sname, int id) rgba[i].r = palette[i*3+0]; rgba[i].g = palette[i*3+1]; rgba[i].b = palette[i*3+2]; - rgba[i].a = 255; + if(alphapalette && i