Dado un valor RGB, como 168, 0, 255
, ¿cómo creo tintes (lo hago más claro) y sombras (lo hago más oscuro) del color?
Entre varias opciones para sombrear y teñir:
Para tonos, multiplique cada componente por 1/4, 1/2, 3/4, etc., de su valor anterior. Cuanto menor sea el factor, más oscuro será el tono.
Para tintes, calcule (255 - valor anterior), multiplique eso por 1/4, 1/2, 3/4, etc. (cuanto mayor sea el factor, más claro será el tinte), y sume eso al valor anterior (asumiendo cada .component es un número entero de 8 bits).
Tenga en cuenta que las manipulaciones de color (como tintes y otros sombreados) deben realizarse en RGB lineal . Sin embargo, es poco probable que los colores RGB especificados en documentos o codificados en imágenes y video estén en RGB lineal, en cuyo caso es necesario aplicar la denominada función de transferencia inversa a cada uno de los componentes del color RGB. Esta función varía con el espacio de color RGB. Por ejemplo, en el espacio de color sRGB (que se puede asumir si se desconoce el espacio de color RGB), esta función es aproximadamente equivalente a elevar cada componente de color sRGB (que va de 0 a 1) a una potencia de 2,2. (Tenga en cuenta que "RGB lineal" no es un espacio de color RGB).
Consulte también el comentario de Violet Giraffe sobre la "corrección de gamma".
rs = r * 0.25
,gs = g * 0.25
,bs = b * 0.25
(que es un tono bastante oscuro); Tint (rt, gt, bt):rt = r + (0.25 * (255 - r))
,gt = g + (0.25 * (255 - g))
,bt = b + (0.25 * (255 - b))
(que es un tinte bastante luz). Lo hice como parte de una variedad genial que creó muchos tonos y funcionó muy bien. Espero que ayude. Gracias Peter.Algunas definiciones
Creando un tinte o un tono
Dependiendo de su modelo de color, existen diferentes métodos para crear un color más oscuro (sombreado) o más claro (teñido):
RGB
:A la sombra:
Para teñir:
De manera más general, el color que resulta en superponer un color
RGB(currentR,currentG,currentB)
con un colorRGBA(aR,aG,aB,alpha)
es:donde
(aR,aG,aB) = black = (0,0,0)
sombrear y(aR,aG,aB) = white = (255,255,255)
teñirHSV
o bienHSB
:Value
/Brightness
o aumentar elSaturation
Saturation
o aumentarValue
/Brightness
HSL
:Lightness
Lightness
Existen fórmulas para convertir de un modelo de color a otro. Según su pregunta inicial, si está dentro
RGB
y desea usar elHSV
modelo para sombrear, por ejemplo, puede simplemente convertir aHSV
, hacer el sombreado y volver a convertir aRGB
. Las fórmulas para convertir no son triviales, pero se pueden encontrar en Internet. Dependiendo de su idioma, también podría estar disponible como función principal:Comparando los modelos
RGB
tiene la ventaja de ser realmente simple de implementar, pero:HSV
oHSB
es algo complejo porque necesitas jugar con dos parámetros para obtener lo que quieres (Saturation
&Value
/Brightness
)HSL
es lo mejor desde mi punto de vista:50%
significa un tono inalterado>50%
significa que el tono es más claro (tinte)<50%
significa que el tono es más oscuro (sombra)Lightness
pieza)fuente
Actualmente estoy experimentando con lienzos y píxeles ... Estoy descubriendo que esta lógica me funciona mejor.
agregar para compensar el valor de 'tinte'
o algo así...
fuente