【问题标题】:Checking if a color is in a specific range of colors检查颜色是否在特定的颜色范围内
【发布时间】:2011-07-17 01:13:32
【问题描述】:

如何检查 rgb 或 hex 值是否在特定颜色范围内?最好用红宝石。

我正在使用 ruby​​ 和 rmagick 从图像中提取颜色(量化和 color_histogram),然后将这些颜色存储在数据库中。如果有人搜索相似的颜色(十六进制或 rgb),我希望能够返回该颜色。

例如如果有人搜索#f4f4f4,我想返回#f5f5f5、#f3f3f3 和所有其他关闭的十六进制值。

【问题讨论】:

    标签: ruby colors hex rgb rmagick


    【解决方案1】:

    如果将 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)
    

    使用球体而不是立方体是“正确”的方法,但对于小球体并不会产生太大影响,而且立方体内的颜色更容易计算。

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2017-11-03
      相关资源
      最近更新 更多