Проверка, находится ли цвет в определенном диапазоне цветов - PullRequest
1 голос
/ 17 марта 2011

Как бы вы проверили, находится ли значение rgb или hex в пределах определенного диапазона цветов? Желательно с рубином.

Я использую ruby ​​и rmagick для извлечения цветов (quantize и color_histogram) из изображений и затем сохраняю эти цвета в базе данных. Если кто-то искал подобный цвет (hex или rgb), я хочу вернуть этот цвет.

например. Если кто-то искал # f4f4f4, я бы хотел вернуть # f5f5f5, # f3f3f3 и все остальные шестнадцатеричные значения закрытия.

1 Ответ

6 голосов
/ 17 марта 2011

Если вы рассматриваете RGB как трехмерное пространство с осями R, G и B, вы можете определить «закрывающие цвета» как куб или сферу вокруг цвета и вернуть все цвета внутри него (или проверить данный цвет, если он достаточно близко). Формулировки для этого довольно просты:

Original color R, G, B
Cube with side length L around it:
  All colors between (R - L/2, G - L/2, B - L/2) and (R + L/2, G + L/2, B + L/2)
Sphere with radius R around it:
  New color R_new, G_new, B_new is inside if
    delta_r * delta_r + delta_g * delta_g + delta_b * delta_b < R * R
      where
        delta_r = abs(R - R_new)
        delta_g = abs(G - G_new)
        delta_b = abs(B - B_new)

Использование сферы вместо куба - это "правильный" способ, но он не будет иметь большого значения для маленьких, а цвета внутри куба немного легче вычислить.

...