2

运行以下代码时,正在跟踪“-2”,我正在努力理解为什么。

var bmd:BitmapData = new BitmapData(1,1,true,0xFFFFFFFF);
bmd.setPixel32(0,0, 0x32FF6B45);
trace(0x32FF6B45-bmd.getPixel32(0,0));

据我所知,它应该跟踪 0。0x32FF6B45 最初分配给坐标 0,0 处的像素。该值应该在 bmd.getPixel32(0,0) 中返回,然后,当它从 0x32FF6B45 中减去时,它应该得到 0。为什么我得到 -2?

编辑:

我已经单独跟踪了这些值,上面跟踪中的操作导致 -2 是有道理的,因为跟踪 0x32FF6B45 会导致 855599941 并跟踪 bmd.getPixel32(0,0) 会导致 855599943。现在的问题是为什么这些价值观有什么不同吗?乳清不是 bmd.getPixel32(0,0) 也追踪到 855599941?

4

2 回答 2

1

我有同样的问题,我相信它与预乘 alpha 有关,如此处所述。在我的代码中,我将一个像素设置为 0xa08800ff 并返回 0xa08700ff。如果您需要 0xff 以外的 alpha,那么不幸的是,可能还需要同时将所有像素值存储在单独的数据结构中。

于 2013-08-21T23:28:02.470 回答
-1

这是意料之中的。

获取像素

这将返回一个值:#RRGGBB (rgb / red, green, blue)

获取像素32

这将返回一个值:#AARRGGBB (argb / alpha, red, green, blue)

例子:

trace('test 0x32FF6B45: '+0x32FF6B45);
var bmd:BitmapData = new BitmapData(1,1,true,0xFFFFFFFF);
trace('setting 0,0 to 0x32FF6B45');
bmd.setPixel32(0,0, 0x32FF6B45);
var color:* = bmd.getPixel32(0,0)
trace('0,0: '+color);
trace(color-bmd.getPixel32(0,0));

结果:

test 0x32FF6B45: 855599941
setting 0,0 to 0x32FF6B45
0,0: 855599943
0

据我所知,您使用的颜色超出了 Flash 的范围。我不确定颜色范围,但我知道在以前的经验中,当拍摄具有多种颜色的 Photoshop 元素时,有时对象会因为颜色值超出范围而无法导入。

@Jari 关于透明度也是正确的。

于 2013-02-19T17:43:12.663 回答