]> Dogcows Code - chaz/tint2/blobdiff - src/util/common.c
*fix* removed warnings
[chaz/tint2] / src / util / common.c
index dd2f0113b94fceefd137b039f66c1176c6bc0a1b..67ddc5dffe6a2ccace129469ac8c516ecd6b0840 100644 (file)
@@ -44,7 +44,9 @@ void copy_file(const char *pathSrc, const char *pathDest)
        fileDest = fopen(pathDest, "wb");
        if (fileDest == NULL) return;
 
-       while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest);
+       while ((nb = fread(line, 1, 100, fileSrc)) > 0)
+               if ( nb != fwrite(line, 1, nb, fileDest))
+                       printf("Error while copying file %s to %s\n", pathSrc, pathDest);
 
        fclose (fileDest);
        fclose (fileSrc);
@@ -239,15 +241,27 @@ void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright
 
 void createHeuristicMask(DATA32* data, int w, int h)
 {
+       // first we need to find the mask color, therefore we check all 4 edge pixel and take the color which
+       // appears most often (we only need to check three edges, the 4th is implicitly clear)
+       unsigned int topLeft = data[0], topRight = data[w-1], bottomLeft = data[w*h-w], bottomRight = data[w*h-1];
+       int max = (topLeft == topRight) + (topLeft == bottomLeft) + (topLeft == bottomRight);
+       int maskPos = 0;
+       if ( max < (topRight == topLeft) + (topRight == bottomLeft) + (topRight == bottomRight) ) {
+               max = (topRight == topLeft) + (topRight == bottomLeft) + (topRight == bottomRight);
+               maskPos = w-1;
+       }
+       if ( max < (bottomLeft == topRight) + (bottomLeft == topLeft) + (bottomLeft == bottomRight) )
+               maskPos = w*h-w;
+
+       // now mask out every pixel which has the same color as the edge pixels
        unsigned char* udata = (unsigned char*)data;
-       int b = udata[0];
-       int g = udata[1];
-       int r = udata[2];
+       unsigned char b = udata[4*maskPos];
+       unsigned char g = udata[4*maskPos+1];
+       unsigned char r = udata[4*maskPos+1];
        int i;
        for (i=0; i<h*w; ++i) {
-               if ( abs(b-*udata)<5 && abs(g-*(udata+1))<5 && abs(r-*(udata+2))<5 ) {
-                       *(udata+3) = 0;
-               }
+               if ( b-udata[0] == 0 && g-udata[1] == 0 && r-udata[2] == 0 )
+                       udata[3] = 0;
                udata += 4;
        }
 }
This page took 0.021297 seconds and 4 git commands to generate.