alpha + RGB -> ARGB?
-
18-09-2019 - |
Domanda
In AS3, c'è un'utilità o funzione per convertire un colore RGB (es 0xFF0000) ed un valore alfa (ad esempio 0,5) in una Un valore ARGB a 32 bit?
E da ARGB a RGB + Alpha?
Qualche spiegazione: un BitmapData può assumere un valore ARGB nel suo costruttore, ma riempiendo forme in sprites richiede solitamente valori RGB. Vorrei i suddetti programmi di utilità per garantire i colori corrispondono.
Soluzione
var argb : int = (alpha<<24)|rgb;
var rgb : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;
Altri suggerimenti
A, R, G, B è un formato comune utilizzato da schede video per consentire la "texture blending" e la trasparenza in una texture. Molti sistemi usano soltanto 8bits per R, G e B in modo che lascia un altro 8bits libera su una dimensione di parola a 32 bit che è comune nei PC.
The mapping is:
For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB
Qualcosa di simile a questo:
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 può essere rappresentato con 8 bit, è possibile. Basta mappare ogni regione del vostro valore ARGB a 32 bit per la variabile corrispondente, per esempio
0x0ABCDEF1
alfa - 0x0A
rosso - 0xBC
verde - 0xDE
blu - 0xF1
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
}
Non posso davvero aggiungere qualcosa di più per le ottime risposte di cui sopra, tuttavia messo più semplicisticamente, i valori alfa sono le ultime due cifre del uint, ad esempio
//white
var white:uint = 0xFFFFFF;
//transparent white
var transparent:uint = 0xFFFFFFFF;
La scala è come al solito, 00 = 1 FF = 0.
Spero che questo aiuti