X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Fcommon.c;h=545a6be6e29689b723c9846f444dbc364c9afa61;hb=a5e1fb6d51a4eac007571b88f0421022e21c3500;hp=9f122d6a3ca9b54b816851dc028b9a7e4888678d;hpb=cbb9b4d7de7e4a439dd586a8c8d4cd5f4e4622ba;p=chaz%2Ftint2 diff --git a/src/util/common.c b/src/util/common.c index 9f122d6..545a6be 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -28,7 +28,7 @@ #include "common.h" -#include "server.h" +#include "../server.h" @@ -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