首頁 >後端開發 >C++ >如何在顏色陣列中找到最接近的顏色匹配?

如何在顏色陣列中找到最接近的顏色匹配?

Linda Hamilton
Linda Hamilton原創
2024-12-31 09:58:12431瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn