Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

Misturando cores

Publicado em General


Esses dias eu estava lendo algumas coisas sobre a teoria das cores e estava encafifado: como que o computador calculava que misturando amarelo e vermelho resultava em laranja?
Tudo bem, tem os códigos RGB e tal, mas como que ele efetua as contas ali?
Fui dar uma procurada sobre o assunto, e encontrei.

O cálculo é feito usando o valor médio de cada cor no RGB, ou seja, calcula-se o valor médio dos vermelhos, verdes e azuis das duas cores. Para exemplificar vai ser fácil, que essas duas cores tem só dois valores para calcularmos:
Primeira cor (vermelho):#FF0000
Segunda cor (amarelo)  :#FFFF00

Vermelho:
---------
primeira cor: 0xFF=255
segunda  cor: 0xFF=255
valor médio : (255+255)/2=255
hexa        : 0xFF

Verde:
------
primeira cor: 0xFF=255
segunda  cor: 0x00=0
valor médio : (255+0)/2=127.5 arredondando = 128
hexa        : 0x80

Azul:
primeira cor: 0x00=0
segunda  cor: 0x00=0
valor médio : 0+0/2=0 
hexa        : 0x00
Importante notar que o número tem que ser arredondado. Seguindo ali a sequência dos resultados, acabamos com a cor #FF8000, que é ... laranja! Tchans! :-)

Para automatizar a coisa um pouco mais, eu fiz um pequeno programinha em Ruby para me dar a mistura de duas cores (em hexa) na linha de comando:
c1=ARGV[0].hex
c2=ARGV[1].hex

red= ((c1>>16).to_f-(((c1>>16)-(c2>>16))/2.0)).round
green= (((c1>>8)&0xFF)-(((c1>>8)&0xFF)-((c2>>8)&0xFF))/2.0).round
blue= ((c1&0xFF)-((c1&0xFF)-(c2&0xFF))/2.0).round
color= ((red<<16)|(green<<8)|blue).to_s(16)
puts color
Nesse papo de teoria das cores, acabei encontrando no site do Eric Meyer um misturador de cores muito bom, e comecei a pensar como que ele criava todas aquelas cores, com meu conhecimento prévio de como misturar as ditas cujas. Abrindo o fonte da página, tem-se o código JavaScript mas está meio confuso, e eu preferi tentar fazer alguma coisa mais "limpinha".

Acabei fazendo um misturador de cores em Ruby (rodando usando eRuby no Apache), que funciona com menos recursos que o do Meyer, mas já saciou a minha curiosidade sobre a coisa. :-)

O fonte do misturador em Ruby vocês encontram aqui.


Comentários

Comentários fechados.

Sem nenhum comentário.

Artigos anteriores