- unsigned long closest = 0xffffffff, close = 0;
- for (int ii = 0; ii < incolors; ii++) {
- // find deviations
- int r = (color->red - icolors[ii].red) & 0xff;
- int g = (color->green - icolors[ii].green) & 0xff;
- int b = (color->blue - icolors[ii].blue) & 0xff;
- // find a weighted absolute deviation
- unsigned long dev = (r * r) + (g * g) + (b * b);
-
- if (dev < closest) {
- closest = dev;
- close = ii;
- }
- }
-
- color->red = icolors[close].red;
- color->green = icolors[close].green;
- color->blue = icolors[close].blue;
- color->pixel = icolors[close].pixel;