首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定一种颜色是否接近另一种颜色

如何确定一种颜色是否接近另一种颜色
EN

Stack Overflow用户
提问于 2014-08-07 03:19:19
回答 6查看 7.7K关注 0票数 0

我正在创建一种颜色工具,这个工具应该告诉我颜色是否接近另一种颜色,例如:

代码语言:javascript
复制
Color[] colors = new colors[] { Color.FromArgb(0,0,255), Color.FromArgb(0,109,251)};
//colors[0] IS BLUE
//colors[1] IS BRIGHTER BLUE (#006DFB)
bool TheyClose = ColorsAreClose(colors[0],colors[1]); //TRUE BLUE IS CLOSE
//TheyColse Should Be = TURE

ColorsAreClose()函数应该是什么样子的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-08-07 03:23:14

像这样怎么样?

代码语言:javascript
复制
bool ColorsAreClose(Color a, Color z, int threshold = 50)
{
    int r = (int)a.R - z.R,
        g = (int)a.G - z.G,
        b = (int)a.B - z.B;
    return (r*r + g*g + b*b) <= threshold*threshold;
}

(我只是猜测了默认阈值,但您应该将其设置为您想要的。)

基本上,这只是计算三个颜色通道在两种颜色之间是否足够接近。

票数 7
EN

Stack Overflow用户

发布于 2014-08-07 03:23:49

一种简单的方法,测量RGB距离:

代码语言:javascript
复制
public bool ColorsAreClose(Color[] colors)
{

    var rDist = Math.Abs(colors[0].R - colors[1].R);
    var gDist = Math.Abs(colors[0].G - colors[1].G);
    var bDist = Math.Abs(colors[0].B - colors[1].B);

    if(rDist + gDist + bDist > Threshold)
        return false;

    return true;

}

阈值是一个常量,其最大偏差为您要考虑的最小偏差。

票数 5
EN

Stack Overflow用户

发布于 2014-08-07 04:45:00

您可以计算3-D颜色空间距离为

代码语言:javascript
复制
Math.Sqrt(Math.Pow(c1.R-c2.R,2)+Math.Pow(c1.G-c2.g,2)+Math.Pow(c1.B-c2.b,2))); 

或者,您可以计算色调差异为

代码语言:javascript
复制
Math.Abs(c1.GetHue() - c2.GetHue());

更深入的讨论可以在here上找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25168445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档