int imPaletteFindColor(const long* palette, int palette_count, long color, unsigned char tol) { assert(palette); assert(palette_count); /* Divides in two section for faster results when Tolerance is 0.*/ if (tol == 0) { for (int lIndex = 0; lIndex < palette_count; lIndex++, palette++) { if (color == *palette) return lIndex; } } else { imbyte red1, green1, blue1; imColorDecode(&red1, &green1, &blue1, color); for (int lIndex = 0; lIndex < palette_count; lIndex++, palette++) { imbyte red2, green2, blue2; imColorDecode(&red2, &green2, &blue2, *palette); if (iAbs(red1 - red2) < tol && iAbs(green1 - green2) < tol && iAbs(blue1 - blue2) < tol) { return lIndex; } } } return -1; }
int distance(const Position pos1, const Position pos2) { return iAbs(pos2.x - pos1.x) + iAbs(pos2.y - pos1.y); }