Heim >Backend-Entwicklung >C++ >Wie kann ich die beste Farbübereinstimmung in einem Farbarray finden?

Wie kann ich die beste Farbübereinstimmung in einem Farbarray finden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-31 09:58:12443Durchsuche

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

Nächste Farbübereinstimmung in einem Array

Gegeben ein Array von Farben und ein separates Farbobjekt, besteht die Aufgabe darin, die größte Übereinstimmung darin zu bestimmen das Array auf die angegebene Farbe. Der Farbabstand ist ein subjektives Konzept und es gibt verschiedene Möglichkeiten, ihn zu quantifizieren.

Nur-Farbton-Methode

Diese Methode konzentriert sich ausschließlich auf die Farbtöne und ignoriert die Sättigung und Helligkeit. Es berechnet den absoluten Unterschied zwischen den Farbtönen der Kandidatenfarbe und der angegebenen Farbe. Die Kandidatenfarbe mit dem kleinsten Farbtonunterschied wird ausgewählt.

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-Raummethode

Diese Methode misst den direkten Abstand zwischen den Farben im RGB-Raum. Es berechnet den euklidischen Abstand zwischen den R-, G- und B-Komponenten der Kandidatenfarbe und der angegebenen Farbe. Die Kandidatenfarbe mit dem kleinsten Abstand wird ausgewählt.

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);
}

Gewichtete Methode

Diese Methode weist den Farbton-, Sättigungs- und Helligkeitskomponenten der Farben Gewichte zu. Es berechnet einen gewichteten Abstand, indem es den Farbtonunterschied mit einer gewichteten Kombination aus Sättigung und Helligkeit kombiniert. Es wird die Kandidatenfarbe mit dem kleinsten gewichteten Abstand ausgewählt.

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);
}

Basierend auf Ihren Anforderungen können Sie die Methode auswählen, die am besten zu Ihrer Anwendung passt.

Das obige ist der detaillierte Inhalt vonWie kann ich die beste Farbübereinstimmung in einem Farbarray finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn