我有一个位图数据,其中包含两种颜色,分别表示黑色和白色。现在黑色区域是透明的,白色区域是可见的。现在,图像应该只能在白色区域上单击,而在黑色透明区域上不能单击。我们该怎么做呢?
PS:白色区域不在常规位置,我的意思是它们位于随机位置。
//add listener for mouse clicks
stage.addEventListener(MouseEvent.CLICK, eventHandler);
function eventHandler(event:MouseEvent):void
{
//1x1 bitmapData to store snapshot
var bmd:BitmapData = new BitmapData(1, 1);
//matrix object to 'move' stage so that pixel under mouse is effectively at 0,0
var matrix:Matrix = new Matrix();
//'move' stage according to mouse x,y values
matrix.translate(-event.stageX, -event.stageY);
//take snapshot of stage
bmd.draw(stage, matrix);
//get colour from snapshot data
var pixel:uint = bmd.getPixel(0, 0);
//trace result
trace("colour = "+pixel.toString(16));
}
取自 http://blog.leeburrows.com/2011/06/get-pixel-colour-below-mouse-pointer/
编辑,因为我有时间:
所以在您的情况下,而不是:
trace("colour = "+pixel.toString(16));
您将使用:
if(pixel.toString(16) == "ffffff") // if clicked pixel is white
{
//do something
}
Sam 的回答很好,但既然你说你知道有问题的像素是位图数据的一部分,你可以跳过拍摄舞台快照,而直接检查位图数据。我认为它可以像以下一样简单:
stage.addEventListener(MouseEvent.CLICK, eventHandler);
function eventHandler(event:MouseEvent):void
{
if (myBitmapData.getPixel(event.stageX, event.stageY) == 0xffffff)
{
// do something
}
}
此外,如果你想考虑alpha,你会想要使用getPixel32((而不是getPixel((。