当运行以下代码时,正在跟踪“-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?
答案 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对透明度也是正确的。