6

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

从 ARGB 到 RGB + alpha?

一些解释:位图数据可以在其构造函数中采用 ARGB 值,但在精灵中填充形状通常采用 RGB 值。我希望上述实用程序确保颜色匹配。

4

5 回答 5

23

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

于 2009-07-19T14:47:02.947 回答
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;
}
于 2009-07-19T16:03:19.323 回答
0

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

0x0ABCDEF1

阿尔法 - 0x0A

红色 - 0xBC

绿色 - 0xDE

蓝色 - 0xF1

于 2009-07-19T14:47:12.243 回答
0
private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
            return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
        }
于 2013-06-04T04:36:37.230 回答
-2

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

//white
var white:uint = 0xFFFFFF;

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

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

希望这可以帮助

于 2009-07-20T09:09:54.927 回答