¿Existen buenas bibliotecas de software que modelen con precisión la mezcla de diferentes colores?

Por lo tanto, mezclar pigmentos de material es diferente de mezclar colores . La pintura real no se adhiere a la estricta teoría del color. En la práctica, los pigmentos absorben y dispersan la luz, y también están sujetos a esas malditas leyes de la química.

Encontré una implementación bastante impresionante de la mezcla de pintura aquí: Fluid Paint. Aquí está el proyecto en GitHub: GitHub – dli / paint

Si, en cambio, solo está buscando un modelo simple para intuir y trabajar con las relaciones de color, en lugar de una representación literal del comportamiento de la pintura, comprender los modelos de color dominantes revelará lo fácil que puede ser.

El modelo de mezcla de colores que está describiendo se llama color sustractivo . Comience con blanco y bloquee los colores hasta que se quede con lo que desea. Tomar un trozo de papel blanco y pintarlo, por ejemplo. RYB (rojo, amarillo, azul) es el sistema sustractivo que aprende en la escuela, aunque las impresoras suelen confiar en CMY (cian, magenta, amarillo).

Compare esto con el color aditivo : comience con el negro y agregue colores. Imagine estar en una habitación oscura y encender luces filtradas hasta que obtenga el color que desea. Los colores de la pantalla funcionan de esta manera, como RGB (rojo, verde, azul). Si observa un color estándar en CSS, por ejemplo, los seis dígitos hexadecimales forman tres valores para R, G y B: # FF0000 es rojo puro, # 00FF00 es verde puro, # 0000FF es azul puro.

Puede pensar en el rango de color potencial de RGB como un cubo con ejes para cada color [1]:

En este modelo, el blanco y negro forman esquinas opuestas. Tenga en cuenta que el punto medio entre Azul y Amarillo no sería Verde, como se esperaba. De hecho, terminarías con Gray.

Compare eso con el modelo HSL, que es un espacio de color cilíndrico:

Aquí podemos identificar el tono (de qué color es) como una posición en un espectro de bucle, con un rango de 0–360º. De esta manera, los colores se relacionan como se esperaba: el azul se convierte en verde se convierte en amarillo.

Moverse entre el punto central y los bordes afecta la Saturación (qué tan colorida es), especificada como un porcentaje. Recorrer el cilindro hacia arriba y hacia abajo determina la luminosidad (qué tan brillante es), también medida como un porcentaje.

Con HSL, es trivial encontrar el rango medio entre dos colores. Si toma los valores de HSL y los promedia [2], obtendrá una aproximación bastante decente de su mezcla. Promediar el azul y el amarillo de esta manera te daría un verde de saturación y ligereza apropiadas. Este comportamiento intuitivo fue la motivación de PARC para inventar HSL, que se convierte directamente desde y hacia RGB.

Una cosa a tener en cuenta es que el ojo humano, como era de esperar, no percibe el color de acuerdo con geometrías tan estrictas. El mapeo de nuestro espacio de color perceptivo produce una forma mucho más curva con un volumen más pequeño. Afortunadamente, tenemos una alternativa llamada Lab que intenta aproximar nuestra percepción:

http://en.wikipedia.org/wiki/Lab…

Los colores de laboratorio se dividen en un valor de Luminosidad y una posición de coordenadas, de ahí el nombre: L, a, b. La luminosidad es, una vez más, 0–100, y la coordenada vive en los ejes verde-magenta y amarillo-azul, entre -128 y 128. La conversión entre RGB y Lab no es trivial, ya que requiere pasar a través de un espacio de color absoluto como sRGB .

En cuanto a las implementaciones de software, esta información debería ponerlo en una buena posición para encontrar ejemplos de mezcla de colores en el idioma que elija. Para empezar, aquí hay un práctico complemento de jQuery que hace una mezcla de color aditiva y sustractiva, así como una serie de otras funciones de color útiles:

(Editar: Neha señala en los comentarios que la matemática sobre la mezcla sustractiva en este complemento es inadecuada ya que se basa en valores RGB para realizar los cálculos).

http://www.xarg.org/project/jque…

[1] Tomado de http://en.wikipedia.org/wiki/HSL…
[2] Advertencia natural: promediar dos ángulos no es tomar la media de los dos números.