replaced libart with new polygon code
[swftools.git] / lib / png.c
index c548aa2..b74dfb0 100644 (file)
--- 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);