new option 'disablelinks'
[swftools.git] / lib / png.c
index c30f77e..c548aa2 100644 (file)
--- a/lib/png.c
+++ b/lib/png.c
@@ -779,10 +779,10 @@ typedef struct {
     u32 color;
 } colornum_t;
 
-int compare_colors(const void*_c1, const void*_c2) {
+static int compare_colors(const void*_c1, const void*_c2) {
     colornum_t*c1 = (colornum_t*)_c1;
     colornum_t*c2 = (colornum_t*)_c2;
-    return c1->num - c2->num;
+    return c2->num - c1->num;
 }
 
 static colornum_t* getColors(COL*image, int size, int*num)
@@ -817,6 +817,7 @@ static colornum_t* getColors(COL*image, int size, int*num)
         int col = (image[t].r)|(image[t].g)<<8|(image[t].b)<<16;
         int min,max,i,l;
         for(min=0, max=count, i=count/2, l=count; i != l; l=i,i=(min+max)/2) {
+           // binary search
             if(colors[i].color >= col) max=i;
             else min=i+1;
         }
@@ -852,6 +853,12 @@ static COL* getOptimalPalette(COL*image, int size, int palettesize)
         return ret;
     }
 
+    if(num>2048) {
+       /* if there are too many different colors, pick the ones that
+          occur most often */
+       num = 2048;
+    }
+
     colornum_t*centers = malloc(sizeof(colornum_t)*palettesize);
     int t;
     for(t=0;t<palettesize;t++) {
@@ -904,7 +911,7 @@ static COL* getOptimalPalette(COL*image, int size, int palettesize)
                 }
             }
             if(!count) {
-                int random = lrand48()%num;
+                int random = rand()%num;
                 centers[s].color = colors[random].color;
                 centers[s].num = 0;
                 change = 1;
@@ -1376,11 +1383,11 @@ EXPORT void savePNG(const char*filename, unsigned char*data, int width, int heig
     fclose(fi);
 }
 
-void writePNG(const char*filename, unsigned char*data, int width, int height)
+EXPORT void writePNG(const char*filename, unsigned char*data, int width, int height)
 {
     savePNG(filename, data, width, height, 0);
 }
-void writePalettePNG(const char*filename, unsigned char*data, int width, int height)
+EXPORT void writePalettePNG(const char*filename, unsigned char*data, int width, int height)
 {
     savePNG(filename, data, width, height, 256);
 }