获取getpixel32的意外跟踪。谁能明白为什么?

时间:2013-02-19 17:15:43

标签: actionscript-3 bitmapdata

当运行以下代码时,正在跟踪“-2”,我正在试图理解为什么会破坏我的想法。

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

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

编辑:

我已单独追踪这些值,因此上述跟踪中的操作导致-2是有意义的,因为追踪0x32FF6B45会导致855599941并且追踪bmd.getPixel32(0,0)会导致855599943。现在为什么这些价值观不同?乳清没有bmd.getPixel32(0,0)也跟踪出855599941?

2 个答案:

答案 0 :(得分:1)

我有同样的问题,我认为它与预乘alpha有关,如described here。在我的代码中,我将像素设置为0xa08800ff并返回0xa08700ff。如果您需要除0xff以外的alpha,那么很遗憾,可能需要同时将所有像素值存储在单独的数据结构中。

答案 1 :(得分:-1)

这是预期的。

  

getPixel

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

  

getPixel32

这将返回一个值:#AARRGGBB(argb / alpha,红色,绿色,蓝色)

示例:

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对透明度也是正确的。