Вопрос

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

А с ARGB на RGB+альфа?

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

Это было полезно?

Решение

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

Другие советы

A,R,G,B — это распространенный формат, используемый видеокартами для обеспечения «смешивания текстур» и прозрачности текстуры.Большинство систем используют только 8 бит для R, G и B, поэтому из 32-битного размера слова, который часто встречается на ПК, остается еще 8 бит.

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

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

0x0ABCDEF1

альфа — 0x0A

красный - 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top