在 as3 中,是否有将 RGB 颜色(例如 0xFF0000)和 alpha 值(例如 .5)转换为 32 位 ARGB 值的实用程序或函数?
从 ARGB 到 RGB + alpha?
一些解释:位图数据可以在其构造函数中采用 ARGB 值,但在精灵中填充形状通常采用 RGB 值。我希望上述实用程序确保颜色匹配。
在 as3 中,是否有将 RGB 颜色(例如 0xFF0000)和 alpha 值(例如 .5)转换为 32 位 ARGB 值的实用程序或函数?
从 ARGB 到 RGB + alpha?
一些解释:位图数据可以在其构造函数中采用 ARGB 值,但在精灵中填充形状通常采用 RGB 值。我希望上述实用程序确保颜色匹配。
var argb : int = (alpha<<24)|rgb;
var rgb : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;
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;
}
如果 alpha 可以用 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 );
}
我不能在上面的优秀答案中添加更多内容,但是更简单地说,alpha 值是 uint 中的最后两位数字,例如
//white
var white:uint = 0xFFFFFF;
//transparent white
var transparent:uint = 0xFFFFFFFF;
比例和往常一样,00 = 1 FF = 0。
希望这可以帮助