alpha + RGB -> ARVB?
-
18-09-2019 - |
Question
as3, est-il un utilitaire ou une fonction pour convertir une couleur RVB (par exemple 0xFF0000) et une valeur alpha (par exemple 0,5) dans une valeur de A ARGB 32 bits?
Et de ARVB RGB + alpha?
Quelques explications: une BitmapData peut prendre une valeur ARGB dans son constructeur, mais le remplissage des formes dans sprites prend habituellement des valeurs RVB. Je voudrais que les services mentionnés ci-dessus pour assurer les couleurs correspondent.
La solution
var argb : int = (alpha<<24)|rgb;
var rgb : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;
Autres conseils
A, R, G, B est un format commun utilisé par les cartes vidéo pour permettre "le mélange de texture" et la transparence dans une texture. La plupart des systèmes utilisent uniquement 8bits pour R, G, B et donc qui laisse un autre 8bits libre sur une taille de mot de 32 bits qui est commun dans les PC.
The mapping is:
For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB
Quelque chose comme ceci:
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 peut être représenté avec 8 bits, il est possible. Qu'élaborer chaque région de votre valeur ARGB 32 bits pour la variable correspondante, par exemple
0x0ABCDEF1
alpha - 0x0A
rouge - 0xBC
vert - 0xDE
bleu - 0xF1
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
}
Je ne peux vraiment rien ajouter aux excellentes réponses ci-dessus, mettent cependant plus simplistes, les valeurs alpha sont les deux derniers chiffres du uint, par exemple
//white
var white:uint = 0xFFFFFF;
//transparent white
var transparent:uint = 0xFFFFFFFF;
L'échelle est comme d'habitude, 00 = 1 FF = 0.
Hope this helps