【问题标题】:Find Colour Range查找颜色范围
【发布时间】:2010-11-16 21:54:47
【问题描述】:

我想从一个 RGB 值的值中找出一系列颜色

例如,如果给我 rgb(0,100,200),它将给我 rgb(0,0,255) 和 rgb(0,255,255) 之间的所有内容。但不是 rgb(255,0,255)。

类似 rgb(150,50,0)。返回:rgb(255,0,0) 和 rgb(255,255,0)。不是 rgb(255,0,255)。

有意义吗?

我正在使用 PHP

【问题讨论】:

  • 您将不得不更具体地确定应如何确定范围的末端。

标签: php colors range rgb


【解决方案1】:

您解释的算法基本上是:“一种颜色由两个 RGB 分量组成。让最强的 RGB 分量为 S,另一个分量为 O。创建 255 个变体,其中 S 为 (255),O 的范围为 0 到 255 。”

例如以下所有示例都产生相同的结果:

a) rgb(0,100,200) 
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)

Result: rgb(0,[0-255],255)

这意味着您只有 6 种变体。

  1. 红色是最大的分量,绿色次之 => rgb(255,[0-255],0)
  2. 红色是最大的分量,蓝色次之 => rgb(255,0,[0-255])
  3. 绿色是最大的分量,红色次之 => rgb([0-255],255,0)
  4. 绿色是最大的分量,蓝色次之 => rgb([0-255],0,255)
  5. 蓝色是最大的分量,红色次之 => rgb([0-255],0,255)
  6. 蓝色是最大的分量,绿色次之 => rgb(0,[0-255],255)

您的算法的意图尚不清楚,所以我猜您的用例实际上与您解释的不同。它不处理具有 1 个或 3 个组件的颜色(实际上是大多数颜色)。

如果您的目标是找到相似的颜色(例如一定距离内的颜色),那么有更好的方法。例如,您可以将颜色转换为 HSV 颜色空间(色相、饱和度、值),然后如果 H、S 或 V 中的任何一个分量与原始颜色相差 +/- 10 步,则表示颜色相似。

例如:

rgb(255,100,0) => hsv(24,100,100)

那么你的范围是 hsv([14-34],[90-110],[90-110])

【讨论】:

    【解决方案2】:

    嗯,我不确定我是否理解正确,但我认为您是说其中一个数字高于其他两个数字,并且其中一个值始终为零。如果是这种情况,您应该能够使用类似于

    的简单 if-else 语句
    if (r > g && r > b) {
      if (g > 0) {
        color1 = rgb(255, 0, 0);
        color2 = rgb(255, 255, 0);
      }
      else {
        color1 = rgb(255, 0, 0);
        color2 = rgb(255, 0, 255);
      }
    }
    else if (r < g && g > b) {
       .
       .
       .
    }
    

    希望这能帮助您解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2011-07-17
      • 2016-01-21
      • 2017-03-20
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多