Pregunta

En as3, hay una utilidad o de la función de convertir un color RGB (por ejemplo 0xFF0000) y un valor alfa (por ejemplo 0,5) en un Un valor ARGB 32-bit?

Y a partir de ARGB a RGB + alfa?

Algunos explicación: a BitmapData puede tomar un valor ARGB en su constructor, pero llenando formas en sprites generalmente toma valores RGB. Me gustaría que las citadas empresas para asegurar colores coinciden.

¿Fue útil?

Solución

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

Otros consejos

A, R, G, B es un formato común utilizado por las tarjetas de vídeo para permitir la "textura de mezcla" y transparencia en una textura. La mayoría de los sistemas sólo utilizan 8 bits para R, G, y B por lo que deja otro 8bits libre de un tamaño de palabra de 32 bits que es común en PCs.

The mapping is:

For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210

AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB

Algo como esto:

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;
}

Si alpha puede ser representada con 8 bits, es posible. Sólo mapear cada región de su valor ARGB de 32 bits para la variable correspondiente, por ejemplo

0x0ABCDEF1

alpha - 0x0A

rojo - 0xBC

verde - 0xDE

azul - 0xf1

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

No puedo añadir nada más a las excelentes respuestas anteriores, sin embargo ponen más simplista, los valores alfa son los dos últimos dígitos de la uint, por ejemplo

//white
var white:uint = 0xFFFFFF;

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

La escala es como de costumbre, 00 = 1 FF = 0.

Espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top