"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como encontrar a cor mais próxima em uma matriz de cores?

Como encontrar a cor mais próxima em uma matriz de cores?

Postado em 2025-03-23
Navegar:456

How to Find the Closest Color in a Color Array?

Determinando a cor mais próxima em uma matriz

comparando cores e identificar a correspondência mais próxima em uma matriz é uma tarefa comum em aplicativos gráficos. Neste artigo, exploraremos três métodos diferentes para realizar isso:

métricas de distância

1. Comparação somente Hue:

Este método considera apenas os tons das cores, ignorando a saturação e o brilho. A distância do tom é calculada usando uma subtração simples, e a tonalidade mais próxima é determinada pela localização da distância mínima.

2. RGB Distância:

Este método mede a distância direta entre os valores RGB das cores. A diferença de cor é calculada como uma distância euclidiana no espaço RGB, e a cor mais próxima é encontrada minimizando essa diferença.

3. Comparação de matiz ponderado, saturação e brilho:

Este método combina matiz, saturação e brilho de maneira ponderada. O brilho percebido é calculado e um número de cores é calculado com base na saturação e brilho. A cor mais próxima é determinada minimizando a soma ponderada da diferença de cor e a distância da matiz. int rosestColor1 (list cores, alvo de cores) { var hue1 = Target.gethue (); var diffs = colors.Select (n => gethuedistance (n.gethue (), hue1)); var diffMin = diferenciado (n => n); return diferefs.tolist (). findIndex (n => n == diffmin); } // comparação de distância rgb int rosestColor2 (list cores, alvo de cores) { var colordiffs = colors.Select (n => colordiff (n, alvo)). min (n => n); Retornar Colors.findIndex (n => Colordiff (n, Target) == Colordiffs); } // Matalha ponderada, saturação e comparação de brilho int rosestColor3 (list cores, alvo de cores) { float hue1 = target.gethue (); var num1 = colornum (alvo); var diffs = colors.Select (n => Math.abs (colornum (n) - num1) gethuedistance (n.gethue (), hue1)); var diffMin = diferenciado (x => x); return diferefs.tolist (). findIndex (n => n == diffmin); }

funções Helper

// brilho colorido como percebido: float getbrightness (cor c) => (c.r * 0,299f c.g * 0,587f c.b * 0,114f) / 256f; // distância entre dois tons: Float Gethedistance (Float Hue1, Float Hue2) => Math.abs (Hue1 - Hue2)> 180? 360 - Math.abs (Hue1 - Hue2): Math.abs (Hue1 - Hue2); // pesado por saturação e brilho: float colornum (cor c) => c.getSaturation () * fatorest getbrightness (c) * fatorbri; // Distância no espaço RGB: int colordiff (color c1, cor c2) => (int) math.sqrt ((c1.r - c2.r) * (c1.r - c2.r) (c1.g - c2.g) * (c1.g - c2.g) (c1.b - c2.b) (c1.b - c2.b); A métrica depende do aplicativo específico. Se a matiz é a principal consideração, a comparação somente para matiz é suficiente. Para correspondência mais geral de cores, a distância RGB ou os métodos de comparação de matiz, saturação e brilho ponderados fornecem resultados mais precisos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3