2011-03-17 137 views
1

如何檢查rgb或十六進制值是否在特定顏色範圍內?最好用紅寶石。檢查顏色是否在特定顏色範圍內

我使用ruby和rmagick從圖像中提取顏色(量化和color_histogram),然後將這些顏色存儲在數據庫中。如果有人搜索了類似的顏色(十六進制或rgb),我希望能夠返回該顏色。

例如如果有人搜索#f4f4f4,我想返回#f5f5f5,#f3f3f3和所有其他關閉的十六進制值。

回答

6

如果將RGB視爲以R,G和B爲軸的三維空間,則可以將「關閉顏色」定義爲立方體或圍繞某種顏色的球體,並返回其中的所有顏色(或檢查對於給定的顏色,如果足夠接近)。對於Formulars是非常簡單的:

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) 

使用球體,而不是一個立方體是「正確」的方式,但它不會有太大的小的差異和立方體裏面的顏色是有點更容易計算。

+2

我愛你,男人。 – colourandcode 2011-03-17 01:04:55