【发布时间】:2009-07-19 14:41:54
【问题描述】:
在 as3 中,是否有将 RGB 颜色(例如 0xFF0000)和 alpha 值(例如 .5)转换为 32 位 ARGB 值的实用程序或函数?
从 ARGB 到 RGB + alpha?
一些解释:位图数据可以在其构造函数中采用 ARGB 值,但在精灵中填充形状通常采用 RGB 值。我希望上述实用程序能够确保颜色匹配。
【问题讨论】:
标签: flash actionscript-3 rgb
在 as3 中,是否有将 RGB 颜色(例如 0xFF0000)和 alpha 值(例如 .5)转换为 32 位 ARGB 值的实用程序或函数?
从 ARGB 到 RGB + alpha?
一些解释:位图数据可以在其构造函数中采用 ARGB 值,但在精灵中填充形状通常采用 RGB 值。我希望上述实用程序能够确保颜色匹配。
【问题讨论】:
标签: flash actionscript-3 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。
希望对你有帮助
【讨论】: