Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何计算两种颜色之间的差异(光度、亮度、颜色)?_Math_Colors_Brightness - Fatal编程技术网

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

Math 如何计算两种颜色之间的差异(光度、亮度、颜色)?,math,colors,brightness,Math,Colors,Brightness,我怎么计算呢 亮度对比度 亮度的差异,以及 色差 在两种给定颜色之间 示例: 输入 颜色1:#99ccff 颜色2:#225588 输出 亮度对比度:4.57:1 亮度差:119 色差:357 将每种颜色从(R、G、B)坐标转换为(H、S、V)[或(H、S、L)]。你可以找到公式 我已经为此编写了Pascal函数: function RGBToHSV(const Color: TRGB): THSV; var cmax, cmin, cdiff: real; begin cma

我怎么计算呢

  • 亮度对比度
  • 亮度的差异,以及
  • 色差
在两种给定颜色之间

示例:

输入

  • 颜色1:#99ccff
  • 颜色2:#225588
输出

  • 亮度对比度:4.57:1
  • 亮度差:119
  • 色差:357
  • 将每种颜色从(R、G、B)坐标转换为(H、S、V)[或(H、S、L)]。你可以找到公式

    我已经为此编写了Pascal函数:

    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;    
    
    函数RGBToHSV(常量颜色:TRGB):THSV;
    变量
    cmax、cmin、cdiff:真实值;
    开始
    cmax:=最大分量(颜色);
    cmin:=最小成分(颜色);
    cdiff:=cmax-cmin;
    用颜色,结果如何
    开始
    //色调
    如果cmax=cmin,则
    hsvHue:=0
    否则,如果cmax=rg,则
    hsvHue:=(60*(绿色-绿色)/cdiff)
    否则,如果cmax=rgbGreen,则
    hsvHue:=(60*(rgbBlue-rgbreed)/cdiff)+120
    其他的
    hsvHue:=(60*(rgbGreen-rgbGreen)/cdiff)+240;
    hsvHue:=Fix360(hsvHue);
    //饱和
    如果cmax=0,则
    hs饱和度:=0
    其他的
    hs饱和度:=1-cmin/cmax;
    //价值观
    hsv值:=cmax;
    结束;
    结束;
    功能RGBToHSL(恒定颜色:TRGB):THSL;
    变量
    cmax、cmin、cdiff、csum:真实值;
    开始
    cmax:=最大分量(颜色);
    cmin:=最小成分(颜色);
    cdiff:=cmax-cmin;
    csum:=cmax+cmin;
    用颜色,结果如何
    开始
    //色调
    如果cmax=cmin,则
    hslHue:=0
    否则,如果cmax=rg,则
    hslHue:=(60*(rgbGreen-rgbBlue)/cdiff)
    否则,如果cmax=rgbGreen,则
    hslHue:=(60*(rgbBlue-rgbreed)/cdiff)+120
    其他的
    hslHue:=(60*(rgbGreen-rgbGreen)/cdiff)+240;
    hslHue:=Fix360(hslHue);
    //饱和
    如果cmax=cmin,则
    hsl饱和度:=0
    否则,如果csum将每种颜色从(R、G、B)坐标转换为(H、S、V)[或(H、S、L)]。你可以找到公式

    我已经为此编写了Pascal函数:

    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;    
    
    函数RGBToHSV(常量颜色:TRGB):THSV;
    变量
    cmax、cmin、cdiff:真实值;
    开始
    cmax:=最大分量(颜色);
    cmin:=最小成分(颜色);
    cdiff:=cmax-cmin;
    用颜色,结果如何
    开始
    //色调
    如果cmax=cmin,则
    hsvHue:=0
    否则,如果cmax=rg,则
    hsvHue:=(60*(绿色-绿色)/cdiff)
    否则,如果cmax=rgbGreen,则
    hsvHue:=(60*(rgbBlue-rgbreed)/cdiff)+120
    其他的
    hsvHue:=(60*(rgbGreen-rgbGreen)/cdiff)+240;
    hsvHue:=Fix360(hsvHue);
    //饱和
    如果cmax=0,则
    hs饱和度:=0
    其他的
    hs饱和度:=1-cmin/cmax;
    //价值观
    hsv值:=cmax;
    结束;
    结束;
    功能RGBToHSL(恒定颜色:TRGB):THSL;
    变量
    cmax、cmin、cdiff、csum:真实值;
    开始
    cmax:=最大分量(颜色);
    cmin:=最小成分(颜色);
    cdiff:=cmax-cmin;
    csum:=cmax+cmin;
    用颜色,结果如何
    开始
    //色调
    如果cmax=cmin,则
    hslHue:=0
    否则,如果cmax=rg,则
    hslHue:=(60*(rgbGreen-rgbBlue)/cdiff)
    否则,如果cmax=rgbGreen,则
    hslHue:=(60*(rgbBlue-rgbreed)/cdiff)+120
    其他的
    hslHue:=(60*(rgbGreen-rgbGreen)/cdiff)+240;
    hslHue:=Fix360(hslHue);
    //饱和
    如果cmax=cmin,则
    hsl饱和度:=0
    
    否则,如果csum我似乎记得这样的事情((红色数值1*299+绿色数值1*587+蓝色数值1*114)/(红色数值2*299+绿色数值2*587+蓝色数值2*114))@anirudh4444:例如,结果是2.57490315。。。看起来不像任何预期的输出。这算什么?你知道这些神奇的数字是从哪里来的吗?我似乎记得这样的事情((红色数值1*299+绿色数值1*587+蓝色数值1*114)/(红色数值2*299+绿色数值2*587+蓝色数值2*114))@anirudh4444:例如,结果是2.57490315。。。看起来不像任何预期的输出。这算什么?知道这些神奇的数字是从哪里来的吗?我还发现了thins link(不需要知道Pascal):@Shawn:嗯,Pascal非常可读,非常类似于高等数学书中描述算法时使用的“伪语言”…Rajbrand:是的,它非常好。我只是不理解
    的颜色、结果do
    Fix360
    部分,所以我最终不得不在其他地方查找..我还找到了thins链接(不需要知道Pascal):@Shawn:嗯,帕斯卡的可读性很强,与高等数学书中描述算法时使用的“伪语言”非常相似……拉杰布兰德:是的,非常好。我只是不理解
    中的颜色、结果do
    Fix360
    部分,所以我最终不得不在别处查找。。