"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo encontrar la coincidencia de color más cercana en una matriz de colores?

¿Cómo encontrar la coincidencia de color más cercana en una matriz de colores?

Publicado el 2025-05-03
Navegar:966

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

El color más cercano coincide en una matriz

dada una matriz de colores y un objeto de color separado, la tarea es determinar la coincidencia más cercana dentro de la matriz al color dado. La distancia de color es un concepto subjetivo, y hay varias formas de cuantificarlo.

solo el método de Hues

este método se centra únicamente en los tonos de los colores, ignorando la saturación y el brillo. Calcula la diferencia absoluta entre los tonos del color candidato y el color dado. Se selecciona el color candidato con la diferencia de tono más pequeña.

int closestColor1(List 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étodo de espacio RGB

Este método mide la distancia directa entre los colores en el espacio RGB. Calcula la distancia euclidiana entre los componentes R, G y B del color candidato y el color dado. Se selecciona el color candidato con la distancia más pequeña.

int closestColor2(List colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}

Método pesado

Este método asigna pesos a los componentes de tono, saturación y brillo de los colores. Calcula una distancia ponderada combinando la diferencia de tono con una combinación ponderada de saturación y brillo. Se selecciona el color candidato con la distancia ponderada más pequeña.

int closestColor3(List 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);
}

Según sus requisitos, puede elegir el método que mejor se adapte a su aplicación.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3