X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Fcommon.c;h=9f122d6a3ca9b54b816851dc028b9a7e4888678d;hb=8abd6d423bffc9cd35928e1911c138163f7dbda9;hp=55a853b7c127f3475cc7d4add583c7ea81247349;hpb=8354267448dab01626da0c4b3d2eedfa20e6858a;p=chaz%2Ftint2 diff --git a/src/util/common.c b/src/util/common.c index 55a853b..9f122d6 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -21,15 +21,112 @@ #include #include #include +#include #include #include #include #include "common.h" +#include "server.h" +void copy_file(const char *pathSrc, const char *pathDest) +{ + FILE *fileSrc, *fileDest; + char line[100]; + int nb; + + fileSrc = fopen(pathSrc, "rb"); + if (fileSrc == NULL) return; + + fileDest = fopen(pathDest, "wb"); + if (fileDest == NULL) return; + + while ((nb = fread(line, 1, 100, fileSrc)) > 0) fwrite(line, 1, nb, fileDest); + + fclose (fileDest); + fclose (fileSrc); +} + + +int parse_line (const char *line, char **key, char **value) +{ + char *a, *b; + + /* Skip useless lines */ + if ((line[0] == '#') || (line[0] == '\n')) return 0; + if (!(a = strchr (line, '='))) return 0; + + /* overwrite '=' with '\0' */ + a[0] = '\0'; + *key = strdup (line); + a++; + + /* overwrite '\n' with '\0' if '\n' present */ + if ((b = strchr (a, '\n'))) b[0] = '\0'; + + *value = strdup (a); + + g_strstrip(*key); + g_strstrip(*value); + return 1; +} + + +int hex_char_to_int (char c) +{ + int r; + + if (c >= '0' && c <= '9') r = c - '0'; + else if (c >= 'a' && c <= 'f') r = c - 'a' + 10; + else if (c >= 'A' && c <= 'F') r = c - 'A' + 10; + else r = 0; + + return r; +} + + +int hex_to_rgb (char *hex, int *r, int *g, int *b) +{ + int len; + + if (hex == NULL || hex[0] != '#') return (0); + + len = strlen (hex); + if (len == 3 + 1) { + *r = hex_char_to_int (hex[1]); + *g = hex_char_to_int (hex[2]); + *b = hex_char_to_int (hex[3]); + } + else if (len == 6 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[3]) * 16 + hex_char_to_int (hex[4]); + *b = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + } + else if (len == 12 + 1) { + *r = hex_char_to_int (hex[1]) * 16 + hex_char_to_int (hex[2]); + *g = hex_char_to_int (hex[5]) * 16 + hex_char_to_int (hex[6]); + *b = hex_char_to_int (hex[9]) * 16 + hex_char_to_int (hex[10]); + } + else return 0; + + return 1; +} + + +void get_color (char *hex, double *rgb) +{ + int r, g, b; + hex_to_rgb (hex, &r, &g, &b); + + rgb[0] = (r / 255.0); + rgb[1] = (g / 255.0); + rgb[2] = (b / 255.0); +} + + void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright) { unsigned int x, y; @@ -139,3 +236,38 @@ void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright } } + +void createHeuristicMask(DATA32* data, int w, int h) +{ + unsigned char* udata = (unsigned char*)data; + int b = udata[0]; + int g = udata[1]; + int r = udata[2]; + int i; + for (i=0; i