Dado um valor RGB, por exemplo 168, 0, 255
, como faço para criar tonalidades (torná-lo mais claro) e tons (torná-lo mais escuro) da cor?
Entre várias opções para sombreamento e tonalidade:
Para tons, multiplique cada componente por 1/4, 1/2, 3/4 etc. do valor anterior. Quanto menor o fator, mais escura a sombra.
Para matizes, calcule (255 - valor anterior), multiplique por 1/4, 1/2, 3/4, etc. (quanto maior o fator, mais clara a matiz) e adicione-a ao valor anterior (assumindo que cada .component é um número inteiro de 8 bits).
Observe que as manipulações de cores (como tonalidades e outros sombreados) devem ser feitas em RGB linear . No entanto, é provável que as cores RGB especificadas em documentos ou codificadas em imagens e vídeos sejam RGB linear; nesse caso, a chamada função de transferência inversa precisa ser aplicada a cada um dos componentes da cor RGB. Esta função varia de acordo com o espaço de cores RGB. Por exemplo, no espaço de cores sRGB (que pode ser assumido se o espaço de cores RGB for desconhecido), essa função é aproximadamente equivalente a aumentar cada componente de cor sRGB (variando de 0 a 1) para uma potência de 2,2. (Observe que "RGB linear" não é um espaço de cores RGB.)
Veja também o comentário de Violet Giraffe sobre "correção gama".
rs = r * 0.25
,gs = g * 0.25
,bs = b * 0.25
(que é uma máscara muito escura); Matiz (ta, GT, bt):rt = r + (0.25 * (255 - r))
,gt = g + (0.25 * (255 - g))
,bt = b + (0.25 * (255 - b))
(que é um tom muito claro). Eu fiz isso como parte de uma matriz legal que criou muitos tons e funcionou muito bem. Espero que ajude. Obrigado Peter.Algumas definições
Criando uma tonalidade ou sombra
Dependendo do modelo de cores, existem métodos diferentes para criar uma cor mais escura (sombreada) ou mais clara (matizada):
RGB
:Sombrear:
Para tingir:
De maneira mais geral, a cor que resulta em camadas de
RGB(currentR,currentG,currentB)
uma corRGBA(aR,aG,aB,alpha)
é:onde
(aR,aG,aB) = black = (0,0,0)
para sombreamento e(aR,aG,aB) = white = (255,255,255)
tingimentoHSV
ouHSB
:Value
/Brightness
ou aumente oSaturation
Saturation
ou aumenteValue
/Brightness
HSL
:Lightness
Lightness
Existem fórmulas para converter de um modelo de cores para outro. De acordo com sua pergunta inicial, se você está dentro
RGB
e deseja usar oHSV
modelo para sombrear, por exemplo, basta converter paraHSV
, fazer o sombreamento e converter novamente paraRGB
. A fórmula para converter não é trivial, mas pode ser encontrada na internet. Dependendo do seu idioma, ele também pode estar disponível como uma função principal:Comparando os modelos
RGB
tem a vantagem de ser realmente simples de implementar, mas:HSV
ouHSB
é meio complexo porque você precisa jogar com dois parâmetros para obter o que deseja (Saturation
&Value
/Brightness
)HSL
é o melhor do meu ponto de vista:50%
significa um Hue inalterado>50%
significa que o matiz é mais claro (matiz)<50%
significa que o matiz é mais escuro (sombra)Lightness
peça)fonte
Atualmente, estou experimentando telas e pixels ... Estou descobrindo que essa lógica funciona melhor para mim.
adicione para compensar o valor 'tonalidade'
ou algo assim...
fonte