Maison > développement back-end > C++ > Comment puis-je trouver la correspondance de couleurs la plus proche dans une gamme de couleurs ?

Comment puis-je trouver la correspondance de couleurs la plus proche dans une gamme de couleurs ?

Linda Hamilton
Libérer: 2024-12-31 09:58:12
original
442 Les gens l'ont consulté

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

Correspondance des couleurs la plus proche dans un tableau

Étant donné un tableau de couleurs et un objet Color distinct, la tâche consiste à déterminer la correspondance la plus proche dans le tableau à la couleur donnée. La distance des couleurs est un concept subjectif et il existe différentes façons de la quantifier.

Méthode des teintes uniquement

Cette méthode se concentre uniquement sur les teintes des couleurs, ignorant la saturation. et la luminosité. Il calcule la différence absolue entre les teintes de la couleur candidate et la couleur donnée. La couleur candidate avec la plus petite différence de teinte est sélectionnée.

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);
}
Copier après la connexion

Méthode de l'espace RVB

Cette méthode mesure la distance directe entre les couleurs dans l'espace RVB. Il calcule la distance euclidienne entre les composantes R, V et B de la couleur candidate et la couleur donnée. La couleur candidate avec la plus petite distance est sélectionnée.

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);
}
Copier après la connexion

Méthode pondérée

Cette méthode attribue des poids aux composants de teinte, de saturation et de luminosité des couleurs. Il calcule une distance pondérée en combinant la différence de teinte avec une combinaison pondérée de saturation et de luminosité. La couleur candidate avec la plus petite distance pondérée est sélectionnée.

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);
}
Copier après la connexion

En fonction de vos exigences, vous pouvez choisir la méthode qui convient le mieux à votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal