alpha + RGB - > ARGB?

时间:2009-07-19 14:41:54

标签: flash actionscript-3 rgb

在as3中,是否有实用程序或函数将RGB颜色(例如0xFF0000)和alpha值(例如.5)转换为A 32位ARGB值?

从ARGB到RGB + alpha?

一些解释:bitmapdata可以在其构造函数中获取ARGB值,但在sprite中填充形状通常需要RGB值。我希望上述实用程序能够确保颜色匹配。

5 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:3)

A,R,G,B是视频卡使用的通用格式,以允许纹理中的“纹理混合”和透明度。大多数系统仅对R,G和B使用8位,因此在PC中常见的是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;
}

答案 2 :(得分:0)

如果alpha可以用8位表示,则可以。只需映射相应变量的32位ARGB值的每个区域,例如

0x0ABCDEF1

alpha - 0x0A

红色 - 0xBC

绿色 - 0xDE

蓝色 - 0xF1

答案 3 :(得分:0)

private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
            return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
        }

答案 4 :(得分:-2)

我无法在上面的优秀答案中添加更多内容,但更简单地说,alpha值是uint中的最后两位数,例如

//white
var white:uint = 0xFFFFFF;

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

比例与往常一样,00 = 1 FF = 0。

希望这有帮助