有没有人知道如何获取两个十六进制颜色值并返回某种索引来说明颜色有多相似?例如,两种黄色阴影可能会返回更高的指数,即它们比灰色和黄色更相似?
(我正在使用javascript,但猜这样的东西将是一种与语言无关的公式/算法)
答案 0 :(得分:13)
这可能是一个开始的算法:
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;
}
答案 1 :(得分:0)
我一直在寻找Pascal代码以寻求解决方案。
我放弃了Pascal限制,发现了这个问题。
Red(),Green()和Blue()函数代替了“ parseInt”。
Result:=(R/255+G/255+B/255)/3
已替换
r /= 255;
g /= 255;
b /= 255;
return (r + g + b) / 3;
Bazza