首页 > 后端开发 > C++ > 如何在颜色阵列中找到最接近的颜色匹配?

如何在颜色阵列中找到最接近的颜色匹配?

Linda Hamilton
发布: 2024-12-31 09:58:12
原创
430 人浏览过

How Can I Find the Closest Color Match in a Color Array?

数组中最接近的颜色匹配

给定一个颜色数组和一个单独的 Color 对象,任务是确定其中最接近的匹配数组为给定的颜色。颜色距离是一个主观概念,有多种量化方法。

仅色调方法

此方法仅关注颜色的色调,忽略饱和度和亮度。它计算候选颜色和给定颜色的色调之间的绝对差异。选择色调差异最小的候选颜色。

int closestColor1(List<Color> colors, Color target)
{
    var hue1 = target.GetHue();
    var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(n => n);
    return diffs.ToList().FindIndex(n => n == diffMin);
}
登录后复制

RGB 空间方法

此方法测量 RGB 空间中颜色之间的直接距离。它计算候选颜色和给定颜色的 R、G 和 B 分量之间的欧几里德距离。选择距离最小的候选颜色。

int closestColor2(List<Color> colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}
登录后复制

加权方法

此方法为颜色的色调、饱和度和亮度分量分配权重。它通过将色调差异与饱和度和亮度的加权组合相结合来计算加权距离。选择加权距离最小的候选颜色。

int closestColor3(List<Color> colors, Color target)
{
    float hue1 = target.GetHue();
    var num1 = ColorNum(target);
    var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) + getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(x => x);
    return diffs.ToList().FindIndex(n => n == diffMin);
}
登录后复制

根据您的要求,您可以选择最适合您的应用的方法。

以上是如何在颜色阵列中找到最接近的颜色匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板