альфа + RGB -> ARGB? - PullRequest
       22

альфа + RGB -> ARGB?

6 голосов
/ 19 июля 2009

В as3 есть ли утилита или функция для преобразования цвета RGB (например, 0xFF0000) и альфа-значения (например, .5) в 32-битное значение ARGB?

А от ARGB до RGB + альфа?

Некоторое объяснение: растровые данные могут принимать значение ARGB в своем конструкторе, но заполнение фигур в спрайтах обычно принимает значения RGB. Я хотел бы, чтобы вышеупомянутые утилиты обеспечивали совпадение цветов.

Ответы [ 5 ]

23 голосов
/ 19 июля 2009

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

3 голосов
/ 19 июля 2009

A, R, G, B - это распространенный формат, используемый видеокартами для «смешивания текстур» и прозрачности текстуры. Большинство систем используют только 8 бит для R, G и B, так что оставшиеся 8 бит освобождаются от 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;
}
0 голосов
/ 04 июня 2013
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
            return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
        }
0 голосов
/ 20 июля 2009

Я не могу ничего добавить к превосходным ответам, приведенным выше, однако, проще говоря, альфа-значения - это две последние цифры в uint, например

//white
var white:uint = 0xFFFFFF;

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

Шкала, как обычно, 00 = 1 FF = 0.

Надеюсь, это поможет

0 голосов
/ 19 июля 2009

Если альфа может быть представлена ​​8 битами, это возможно. Просто отобразите каждую область вашего 32-битного значения ARGB для соответствующей переменной, например

0x0ABCDEF1

альфа - 0x0A

красный - 0xBC

зеленый - 0xDE

синий - 0xF1

...