X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpng.c;h=b74dfb074324f8ada59d3aee22759959468b249c;hb=18cb339268fdf827801ef1ddf3cd714014fd22d1;hp=c548aa2e8e2e098b185f56086d09d19a701d0d95;hpb=8c53784c291897b7421c18a487bf301da9244eb0;p=swftools.git diff --git a/lib/png.c b/lib/png.c index c548aa2..b74dfb0 100644 --- a/lib/png.c +++ b/lib/png.c @@ -486,6 +486,7 @@ EXPORT int getPNG(const char*sname, int*destwidth, int*destheight, unsigned char } if(!png_read_header(fi, &header)) { + fclose(fi); return 0; } @@ -1342,8 +1343,15 @@ EXPORT void savePNG(const char*filename, unsigned char*data, int width, int heig long idatsize = 0; { int x,y; - int srcwidth = width * (bpp/8); - int linelen = 1 + ((srcwidth+3)&~3); + int bypp = bpp/8; + int srcwidth = width * bypp; + int linelen = 1 + srcwidth; + if(bypp==2) + linelen = 1 + ((srcwidth+1)&~1); + else if(bypp==3) + linelen = 1 + ((srcwidth+2)/3)*3; + else if(bypp==4) + linelen = 1 + ((srcwidth+3)&~3); unsigned char* line = (unsigned char*)malloc(linelen); unsigned char* bestline = (unsigned char*)malloc(linelen); memset(line, 0, linelen);