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
Linda Hamiltonoriginal
2024-12-31 09:58:12478parcourir

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

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

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

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!

Déclaration:
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