quarta-feira, 5 de janeiro de 2011

As cores em RGB

As cores RGB, utilizada para exibição de imagens em monitores, consiste na mistura de 3 cores primárias: O vermelho (Red ou R), o verde (Green ou G) e o azul (Blue ou B).

Hoje em dia, o número de cores existentes pode ser representado em 24 bits, ou seja, 8 bits para cada cor primária (8 do vermelho, 8 do verde e 8 do azul).

Existe um sistema operacional por aí que diz que utiliza 32 bits de cores, mas isso é mentira: Na verdade os 8 bits adicionais usado por esse sistema operacional são atalhos para outras cores representadas pelos demais 24 bits, traduzido como um canal alpha (utilizado para fazer "semi transparência"). Apesar do canal alpha ser amplamente utilizado não é necessário que ele esteja representado na paleta de cores, como faz esse sistema operacional popular.

Com 8 bits é possível representar 2^8 (dois elevado a oitava) tons de uma cor, que é igual a 256 tons, sendo representado de 0 a 255.

Logo temos a seguinte variação de cores: 256 tons vermelhos que podem se misturar com 256 tons de verde que por sua vez podem se misturar com 256 tons de azul, gerando uma combinação de 256x256x256 = 16.777.216 cores diferentes (os famosos 16 milhões de cores)

Na computação é muito utilizada a representação hexadecimal que consiste em utilizar a numeração de 0 até F (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) ao invés do popular decimal (0,1,2,3,4,5,6,7,8,9,0).

Em hexadecimal, 255 é representado como FF. Logo a variação dos tons das cores podem ser representados 0 até FF

Para inidicar as cores RGB é amplamente utilizado o seguinte formato: #(VERMELHO)(VERDE)(AZUL) aonde o vermelho, o verde e o azul é substituido pelo seu valor em hexadecimal, por exemplo:

Vermelho = utilizar o tom 103 (67 em hexadecimal)
Verde = utilizar o tom 255 (FF em hexadecimal)
Azul = utilizar o tom 29 (1D em hexadecimal)

Logo essa cor fica representada como #67FF1D

Abaixo segue 2 pequenos scripts em shell, capaz de gerar as cores rgb no formato em hexadecimal e o oposto:

Retorna o valor das cores em decimal do valor informado no formato #RRGGBB:

#!/bin/bash
achacor(){
echo "{ibase=16; $1}" | bc
}
NOME_COR=$1
COR1=${NOME_COR:1:2}
COR2=${NOME_COR:3:2}
COR3=${NOME_COR:5:2}

echo R: `achacor $COR1` G: `achacor $COR2` B: `achacor $COR3`


Retorna o valor das cores no formato #RRGGBB do valor informado em decimal:

#!/bin/bash
achacor(){
echo "{obase=16; $1}" | bc | awk '{printf "%02s\n", $0}'
}
COR1=$1
COR2=$2
COR3=$3

echo '#'`achacor $COR1``achacor $COR2``achacor $COR3`

Nenhum comentário:

Postar um comentário