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