【问题标题】:Detect similar colours from hex values从十六进制值中检测相似的颜色
【发布时间】:2014-03-27 15:26:50
【问题描述】:

有谁知道获取两个十六进制颜色值并返回某种索引来说明颜色有多相似的方法?例如,两种黄色可能会返回更高的索引,即它们比灰色和黄色更相似?

(我使用 javascript,但猜想这样的东西将是一个独立于语言的公式/算法)

【问题讨论】:

标签: javascript colors


【解决方案1】:

可以从以下算法开始:

var yellow1 = "FFFF99";
var yellow2 = "FFFF00";
var blue = "0000FF";

function hexColorDelta(hex1, hex2) {
    // get red/green/blue int values of hex1
    var r1 = parseInt(hex1.substring(0, 2), 16);
    var g1 = parseInt(hex1.substring(2, 4), 16);
    var b1 = parseInt(hex1.substring(4, 6), 16);
    // get red/green/blue int values of hex2
    var r2 = parseInt(hex2.substring(0, 2), 16);
    var g2 = parseInt(hex2.substring(2, 4), 16);
    var b2 = parseInt(hex2.substring(4, 6), 16);
    // calculate differences between reds, greens and blues
    var r = 255 - Math.abs(r1 - r2);
    var g = 255 - Math.abs(g1 - g2);
    var b = 255 - Math.abs(b1 - b2);
    // limit differences between 0 and 1
    r /= 255;
    g /= 255;
    b /= 255;
    // 0 means opposit colors, 1 means same colors
    return (r + g + b) / 3;
}

console.log(hexColorDelta(yellow1, yellow2)); // 0.7999999999999999 
console.log(hexColorDelta(yellow1, blue)); // 0.19999999999999998 

【讨论】:

    【解决方案2】:

    我一直在寻找 Pascal 代码的解决方案。

    我放弃了帕斯卡限制,发现了这个问题。

    Red()、Green() 和 Blue() 函数替换了“parseInt”。

    Result:=(R/255+G/255+B/255)/3
    

    替换

    r /= 255;
    g /= 255;
    b /= 255;
    return (r + g + b) / 3;
    

    巴扎

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2019-06-16
      • 2021-03-08
      相关资源
      最近更新 更多