Альфа + RGB - > ARGB?
в as3 есть утилита или функция для преобразования цвета RGB (например, 0xFF0000) и Альфа-значения (например .5) в 32-битное значение ARGB?
и от ARGB до RGB + alpha?
некоторое объяснение: bitmapdata может принимать значение ARGB в своем конструкторе, но заполнение фигур в спрайтах обычно принимает значения RGB. Я хотел бы, чтобы вышеупомянутые утилиты обеспечивали соответствие цветов.
5 ответов
var argb : int = (alpha<<24)|rgb;
var rgb : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;
A,R,G, B-общий формат, используемый видеокартами для обеспечения "смешивания текстур" и прозрачности в текстуре. Большинство систем используют только 8bits для R,G и B, так что оставляет еще 8bits свободным от 32-битного размера слова, который распространен в ПК.
The mapping is:
For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB
что-то вроде этого:
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;
}
Если alpha может быть представлена 8 битами, это возможно. Просто сопоставьте каждую область вашего 32-битного значения ARGB для соответствующей переменной, например
0x0ABCDEF1
Альфа - 0x0A
red-0xBC
зеленый - 0xDE
сине - 0xF1
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
}
Я не могу добавить ничего больше к отличным ответам выше, однако проще говоря, Альфа-значения являются последними двумя цифрами в uint, например
//white
var white:uint = 0xFFFFFF;
//transparent white
var transparent:uint = 0xFFFFFFFF;
шкала, как обычно, 00 = 1 FF = 0.
надеюсь, что это помогает