在AS3,是否有一个实用程序或功能到RGB颜色(例如为0xFF0000)和α值(例如0.5)转换成一个32位ARGB值?

和从ARGB到RGB +阿尔法?

一些说明:一个BitmapData可以在其构造方法的ARGB值,但填充形状在精灵通常需要RGB值。我想上述实用程序来确保颜色匹配。

有帮助吗?

解决方案

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

其他提示

A,R,G,B是由视频卡,以允许“纹理混合”和透明度的纹理的公共格式。大多数系统仅使叶片另一个8位游离出一个32位的字的大小,其是常见的个人电脑使用的R,G,和B 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