(R-50)^2 + (G-100)^2 + (B-20) ^2或者最简单的|R-50| + |G-100| + |B-20|

解决方案 »

  1.   

    比如说 rgb(221,45,30) 那么距离“红色”的距离大致可以认为是 |255-221|+|0-45|+|0-30|=109。如果你认定在170以内就可以,那么这个rgb看来就是在这个范围内。你也可以乘上两个参数,例如 |255-221|+a*|0-45|+b*|0-30|,通过调整参数a和b的值(初始值都为1.0)来达到调整一下效果。
      

  2.   


    上面的那种是不行的。
    因为 R如果就是255-85 0  0  这个时候也是170,但是肯定不是红。  同理,255-80 5 0 这样也不行。所以,我实在找不到好的方法。老哥,你能帮我想想吗?? 
    -----------------------------------------------------------------------------------------
    我就是找不出来这个红色的 范围该怎么表达 所以我才说的。
    if Col.R>=128 andalso Col.G<50 andalso Col.B<10 Then  ----这个仁兄回答的是错的。因为红的范围这样表达肯定不准确,很多很多种,不是一句话的事。比如R 250-255之间的时候 G可以取值0-80 这个时候要分很多种情况了,如G在0-5的时候 B可以0-80 ,G如果再5-15 B就可以0-30……
    也就是说,如果以5为一个档次的话 那么就有 R(变化范围)/5 * G(变化范围)/5* B(变化范围)/5 种可能,这样来表达一种肉眼红那你写IF要写多少句,你算过没有???这个是3个水平滚动条数组 分别改变rgb 然后填充到shape里的代码,你自己拉动滚动条看看就知道了。
    肉眼红 变化范围是很多很多种的,而且每个值不同的时候,另外2个的取值范围也会跟着改变~……Private Sub HScroll1_Change(Index As Integer)
    Label1(0).Caption = "R:" & 255 - HScroll1(0).Value
    Label1(1).Caption = "G:" & 255 - HScroll1(1).Value
    Label1(2).Caption = "B:" & 255 - HScroll1(2).Value
     
    Shape1.FillColor = RGB(255 - HScroll1(0).Value, 255 - HScroll1(1).Value, 255 - HScroll1(2).Value)
    End Sub
      

  3.   


    你这个想法挺好的啊。老兄,能帮我研究下 R定下来后G,B的逻辑关系吗? 具体见我上面的回复,我测过了。还有如果是 RGB(100,100,100) 这个颜色,怎么判断某一个颜色是否就是肉眼看上去基本就是这个颜色, 我已经研究了半个月了 ,还是没头绪。
      

  4.   


    上面的那种是不行的。
    因为 R如果就是255-85 0  0  这个时候也是170,但是肯定不是红。  同理,255-80 5 0 这样也不行。所以,我实在找不到好的方法。老哥,你能帮我想想吗?? 
    谁也没有要求你用170作为判断,你应该自己找到一个值。另外如果觉得求绝对值不科学,应该用更准确的 ^2 求平方啊。求绝对值只不过是“心算”时简单一点,肯定是为了简化做牺牲的。另外你还可以给a和b计算出一个比较合理的拟合系数,是的最终的随(255-r,g,b)三元素值得到的“距离值”是你期望的那种距离判断值。
      

  5.   

    比如说你可以测试一下  (255-r)^2 + g ^2 + b^2 < 12000最后的约束值你可以自己找到一个真正合理的值,不要我说12000就去测试12000。
      

  6.   

    上图是Blend里的配色图,可以发现右边竖条是从红到紫的颜色,左边是表示一种颜色从“鲜艳饱满的”到黑白的变化的平面。如果能把一组RGB值通过一种映射转化成一组坐标(x, y, z),其中z对应右边竖条的纵向坐标,(x, y)对应左边平面的坐标,
    红色(255, 0, 0)转化为(右上角, 上下边缘),则可以通过把某组RGB值转换(x, y, z),计算z到上下边缘的距离来判断是不是红色,计算(x, y)到右上角的距离来判断红色够不够“鲜艳饱满”。我觉得这可以是个思路,具体的数学计算没试过不知道。
      

  7.   


    其实就是把RGB转化成色调、饱和度和亮度,再分别判断范围,肯定比直接拿RGB的距离算要准确。转换算法搜一下肯定有的。
      

  8.   

    表示颜色的公式有很多,可以换一个,不用rgb