/* bestfit_color: * Searches a palette for the color closest to the requested R, G, B value. */ int bestfit_color(PALLETE pal, int r, int g, int b) { int i, coldiff, lowest, bestfit; if (col_diff[1] == 0) bestfit_init(); bestfit = 0; lowest = INT_MAX; if ((r == 63) && (g == 0) && (b == 63)) i = 0; else i = 1; while (i<PAL_SIZE) { RGB *rgb = &pal[i]; coldiff = (col_diff + 0) [ (rgb->g - g) & 0x7F ]; if (coldiff < lowest) { coldiff += (col_diff + 128) [ (rgb->r - r) & 0x7F ]; if (coldiff < lowest) { coldiff += (col_diff + 256) [ (rgb->b - b) & 0x7F ]; if (coldiff < lowest) { bestfit = rgb - pal; /* faster than `bestfit = i;' */ if (coldiff == 0) return bestfit; lowest = coldiff; } } } i++; } return bestfit; }
/* bestfit_color: * Searches a palette for the color closest to the requested R, G, B value. */ int bestfit_color(AL_CONST PALETTE pal, int r, int g, int b) { int i, coldiff, lowest, bestfit; ASSERT(r >= 0 && r <= 63); ASSERT(g >= 0 && g <= 63); ASSERT(b >= 0 && b <= 63); if (col_diff[1] == 0) bestfit_init(); bestfit = 0; lowest = INT_MAX; /* only the transparent (pink) color can be mapped to index 0 */ if ((r == 63) && (g == 0) && (b == 63)) i = 0; else i = 1; while (i<PAL_SIZE) { AL_CONST RGB *rgb = &pal[i]; coldiff = (col_diff + 0) [ (rgb->g - g) & 0x7F ]; if (coldiff < lowest) { coldiff += (col_diff + 128) [ (rgb->r - r) & 0x7F ]; if (coldiff < lowest) { coldiff += (col_diff + 256) [ (rgb->b - b) & 0x7F ]; if (coldiff < lowest) { bestfit = rgb - pal; /* faster than `bestfit = i;' */ if (coldiff == 0) return bestfit; lowest = coldiff; } } } i++; } return bestfit; }