如何计算两种颜色之间的差异(亮度,亮度,颜色)?

如何计算两种颜色之间的差异(亮度,亮度,颜色)?

问题描述:

如何计算如何计算两种颜色之间的差异(亮度,亮度,颜色)?

  • 亮度对比度,
  • 的亮度差,和
  • 的差在颜色

两个给定的颜色之间?

实施例:

输入

  • 颜色1:#99CCFF
  • 颜色2:#225588

输出

  • 光度对比度:4.57:1的亮度
  • 差:在颜色119
  • 差:357
+0

我好像记得是这样的((red_value1 * 299 + green_value1 * 587 + blue_value1 * 114)/(red_value2 * 299 + green_value2 * 587 + blue_value2 * 114)) – 2011-06-10 14:51:01

+0

@ anirudh4444:对于我的示例,结果是2.57490315 ...看起来不像任何预期的输出。这应该算什么?任何想法,这些神奇的数字来自哪里? – Shawn 2011-06-10 15:14:54

从转换各颜色(R,G,B)到(H,S, V)[或(H,S,L)]坐标。你可以找到公式at Wikipedia

我已经写帕斯卡尔功能如下:

function RGBToHSV(const Color: TRGB): THSV; 
var 
    cmax, cmin, cdiff: real; 
begin 
    cmax := MaxComponent(Color); 
    cmin := MinComponent(Color); 
    cdiff := cmax - cmin; 

    with Color, result do 
    begin 

    // Hue 
    if cmax = cmin then 
     hsvHue := 0 
    else if cmax = rgbRed then 
     hsvHue := (60 * (rgbGreen - rgbBlue)/cdiff) 
    else if cmax = rgbGreen then 
     hsvHue := (60 * (rgbBlue - rgbRed)/cdiff) + 120 
    else 
     hsvHue := (60 * (rgbRed - rgbGreen)/cdiff) + 240; 

    hsvHue := Fix360(hsvHue); 

    // Saturation 
    if cmax = 0 then 
     hsvSaturation := 0 
    else 
     hsvSaturation := 1 - cmin/cmax; 

    // Value 
    hsvValue := cmax; 

    end; 

end; 

function RGBToHSL(const Color: TRGB): THSL; 
var 
    cmax, cmin, cdiff, csum: real; 
begin 
    cmax := MaxComponent(Color); 
    cmin := MinComponent(Color); 
    cdiff := cmax - cmin; 
    csum := cmax + cmin; 

    with Color, result do 
    begin 

    // Hue 
    if cmax = cmin then 
     hslHue := 0 
    else if cmax = rgbRed then 
     hslHue := (60 * (rgbGreen - rgbBlue)/cdiff) 
    else if cmax = rgbGreen then 
     hslHue := (60 * (rgbBlue - rgbRed)/cdiff) + 120 
    else 
     hslHue := (60 * (rgbRed - rgbGreen)/cdiff) + 240; 

    hslHue := Fix360(hslHue); 

    // Saturation 
    if cmax = cmin then 
     hslSaturation := 0 
    else if csum <= 1 then 
     hslSaturation := cdiff/csum 
    else 
     hslSaturation := cdiff/(2 - csum); 

    // Lightness 
    hslLightness := csum/2; 

    end; 

end;  
+0

我也找到了链接(不需要了解Pascal):http://130.113.54.154/~monger/hsl-rgb.html – Shawn 2011-06-10 17:56:30

+0

@Shawn:嗯,Pascal非常可读,非常类似于'伪语言'在高级数学书籍中,当算法被描述时... – 2011-06-10 17:59:40

+0

Rajbrand:是的,它非常好。我只是不明白'用颜色,结果做'和'Fix360'部分,所以我最终不得不在别处查看它。 – Shawn 2011-06-10 18:08:01