Parece que desea ordenar los colores por matiz. Para hacer eso, necesita calcular el tono de un color, y la estructura Wpf System.Media.Color
no incluye propiedades para hacer eso por usted.
Tienes dos opciones:
- puede calcular manualmente la tonalidad. Esto no es realmente difícil, pero es complicado: muchas declaraciones de si ... entonces. Código de ejemplo que hace esto can be found on devx. Esto es más trabajo y menos legible, pero probablemente la opción más rápida.
- Puede usar
System.Drawing.Color.GetHue
. La estructura de color más antigua de winforms-era System.Drawing
admite computación del tono. Eso hace que el código sea realmente simple; algo como System.Drawing.Color.FromArgb(col.R, col.G, col.B).GetHue()
será suficiente, ¡agradable y corto! Sin embargo, significa que tratará con dos estructuras con nombres idénticos y, por supuesto, necesitará referenciar el ensamblaje System.Drawing.dll
. Este tipo de métodos tienden a ser lentos y hacen muchas comprobaciones de cordura, por lo que si el rendimiento es crítico, es probable que sea menos atractivo.
El espacio de color es tridimensional. Aunque puede ordenar en una dirección (como el tono, aquí), la secuencia de colores resultante solo aparecerá continua si mantiene constantes las otras dos direcciones (saturación y brillo en el modelo HSB). Es por eso que la mayoría de los recolectores de color eligen una representación bidimensional, pero incluso así, debes dejar una dimensión constante dentro de un selector de color dado para mantener un gradiente continuo.
Es imposible representar un espacio tridimensional (color) continuamente en una secuencia unidimensional. ¿Qué estás tratando de lograr exactamente? –
Bien, gracias. Eso es exactamente lo que necesitaba saber. Pensé lo contrario. – NVM