AS3 BitmapData阈值错误

时间:2014-05-29 17:31:56

标签: actionscript-3 flash bitmapdata threshold

BitmapData类has 阈值方法,它允许检查有多少像素满足某些条件(例如"< =","> "" ==&#34);但是当阈值中的alpha通道在范围(0,FF)内时,该方法似乎不能正常工作,尽管它适用于极值0和ff。 我用这个代码进行测试:

bd = new BitmapData(16,16,true,0);
var i:int = 0;
var x:int, y:int;
for (var a:uint = 0x0; a<=0xFF; a++){
    x = Math.floor(i/16);
    y = i - x*16;
//  trace(x,y);
    var col:uint = combineARGB(a,0xAA,0xBB,0xCC);
    trace('set: '+col.toString(16));
    bd.setPixel32(x,y,col);
    var getP:uint = bd.getPixel32(x,y);
    trace('get: '+getP.toString(16));
    trace('test threshold at '+getP.toString(16)+': '+bd.threshold(bd,bd.rect, new Point(),  "==", getP,getP));

    i++;

}

因此,我们创建一个16x16位图数据,并将其填充ARGB值,例如1AAABBCC到FFAABBCC。 AS3不会将颜色设置为与我们请求的完全相同的值,而是设置为它们的某些操作版本。然而,如果我们设置一个像素,得到它并使用阈值方法来找到像素的值,它只会在alpha为ff或0时起作用:

set: aabbcc
get: 0
test threshold at 0: 256 // because we initialized all pixels to be 0
set: 1aabbcc
get: 1ffffff
test threshold at 1ffffff: 0


set: feaabbcc
get: feaabbcc
test threshold at feaabbcc: 0
set: ffaabbcc
get: ffaabbcc
test threshold at ffaabbcc: 1

当然,如果我们可以使用getPixel32获取像素,那么它应该与阈值相同吗?规则如下:

  

((pixelValue&amp; mask)操作(阈值和掩码))

默认情况下,Mask为0xFFFFFFFF。

trace((0xfeaabbcc & 0xffffffff) == (0xfeaabbcc & 0xffffffff)); // true

相关:post

0 个答案:

没有答案