Codificacao de cores RGB
por João Neto
Utilizamos as codificações de cores freqüentemente, mas muitos não sabem
o que realmente são aquelas letras e números que representam essas cores,
chamadas de RGB, RGB é um acronômino para Red, Green e Blue que são as
cores básicas que formam uma determinada cor, quando utilizamos no Flash
ou no próprio HTML o RGB, ele é codificado no formato #RRGGBB, #7896B4
por exemplo.
Esse formato é a união dos valores RGB tudo agrupados 2 a 2, só que esses
valores estão em uma numeração diferente da nossa, eles estão em hexadecimal.
A numeração hexadecimal ( base 16 ) possui números que vão de 0 até 9
e letras que vão de A até F, e representam 10 até 15, respectivamente.
Decimal : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hexadecimal: 0 1 2 3 4 5 6 7 8 9 A B C D E F
para fazer o calculo de hexadecimal para decimal fazemos assim:
( n0 * 16^0 ) + ( n1 * 16^1 ) + ... + ( nN * 16^N )
onde n0 até nN são os números ( ou letras ) que são multiplicados por 16
elevado a potencia do índice.
para localizar o índice devemos contar as posições dos algarismos da direita
para a esquerda começando com 0;
1-0 <-> indices
F-F <-> número
Fazendo os calculos:
( F * 16^0 ) + ( F * 16^1 )
( 15 * 16^0 ) + ( 15 * 16^1 );
( 15 * 1 ) + ( 15 * 16 )
15 + 240 = 255 = FF
Então FF em hexadecimal equivale a 255 em decimal...
Fazendo o calculo para a cor #7896B4 ficaria assim:
RR -> Vermelho: 78h
1-0
7-8
( 8 * 16^0 ) + ( 7 * 16^1 )
( 8 * 1 ) + ( 7 * 16 )
8 + 112 = 120
GG -> Verde: 96h
1-0
9-6
( 6 * 16^0 ) + ( 9 * 16^1 )
( 6 * 1 ) + ( 9 * 16 )
6 + 144 = 150
BB -> Azul: B4h
1-0
B-4
( 4 * 16^0 ) + ( 11 * 16^1 )
( 4 * 1 ) + ( 11 * 16 )
4 + 176 = 180
Então a cor 0x7896B4h é equivalente à R:120 G:150 B:180
Sabendo agora como funciona a codificação das cores RGB, podemos criar
uma rotina ( função ) em Flash para fazer isso para nós automaticamente:
_global.RGB2Dec = function( RGBstr ){
var str = RGBstr.split( '#' ).join( '' ).toUpperCase();
var let = 'ABCDEF';
var ret = []; for ( var i = 0 ; i < str.length ; i+= 2 ){
var pt = str.substr( i , 2 );
var s = 0;
for ( var j = 0 ; j < 2 ; j++ ){
var char = pt.charAt( j );
var num = ( pos = let.indexOf( char ) ) == -1 ? parseInt( char ) : 10 + pos;
s += num * Math.pow( 16 , 1 - j );
}
ret.push( s );
}
return( { r:ret[ 0 ] , g:ret[ 1 ] , b:ret[ 2 ] } );
}
O código acima retira a '#' da String e separa os números em blocos de 2
e logo após feita a separação é feito o calculo, com o cálculo pronto
é retornado um objeto com 3 propriedades, sendo elas R, G e B, um exemplo
de uso do código acima:
var cor = RGB2Dec( '#7896B4' );
trace( cor.R ); //120
trace( cor.G ); //150
trace( cor.B ); //180
postado por Jo? Neto em 10:37 PM