数组中最接近的颜色匹配
给定一个颜色数组和一个单独的 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中文网其他相关文章!