Pergunta

em AS3, existe uma utilidade ou função de converter uma cor RGB (por exemplo 0xFF0000) e um valor alfa (por exemplo 0,5) em um valor Um ARGB 32 bits?

E a partir ARGB para RGB + alfa?

Alguns explicação: a BitmapData pode tomar um valor de ARGB em seu construtor, mas enchendo formas em sprites geralmente leva valores RGB. Gostaria que os utilitários acima mencionados para garantir cores combinam-se.

Foi útil?

Solução

var argb  : int = (alpha<<24)|rgb;
var rgb   : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;

Outras dicas

A, R, G, B é um formato comum usado por placas de vídeo para permitir a "textura de mistura" e transparência em uma textura. A maioria dos sistemas só usam 8bits para R, G e B para que as folhas mais 8bits livres para fora de um tamanho de palavra de 32 bits que é comum em PCs.

The mapping is:

For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210

AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB

Algo parecido com isto:

private function toARGB(rgb:uint, newAlpha:uint):uint{
  var argb:uint = 0;
  argb = (rgb);
  argb += (newAlpha<<24);
  return argb;
}

private function toRGB(argb:uint):uint{
  var rgb:uint = 0;
  argb = (argb & 0xFFFFFF);
  return rgb;
}

Se alfa pode ser representado com 8 bits, é possível. Apenas mapear cada região do seu valor de ARGB de 32 bits para a variável correspondente, por exemplo

0x0ABCDEF1

alpha - 0x0A

Red - 0xBC

green - 0xDE

blue - 0xF1

private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
            return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
        }

Eu realmente não posso acrescentar nada mais aos excelentes respostas acima, no entanto colocar mais simplista, os valores alfa são os dois últimos dígitos do uint, por exemplo

//white
var white:uint = 0xFFFFFF;

//transparent white
var transparent:uint = 0xFFFFFFFF;

A escala é, como de costume, 00 = 1 FF = 0.

Espero que isso ajude

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top