1

我有一个位图数据,其中包含两种颜色,例如黑色和白色。现在黑色区域是透明的,白色区域是可见的。现在图像应该只能在白色区域而不是黑色透明区域上可点击。我们应该怎么做?

PS:白色区域不在常规位置,我的意思是它们在随机位置。

4

2 回答 2

1

Sam 的回答很好,但是既然您说您知道所讨论的像素是位图数据的一部分,您可以跳过拍摄舞台快照而直接检查位图数据。我认为它可以很简单:

stage.addEventListener(MouseEvent.CLICK, eventHandler);

function eventHandler(event:MouseEvent):void
{
   if (myBitmapData.getPixel(event.stageX, event.stageY) == 0xffffff)
   {
       // do something
   }
}

此外,如果您想考虑 alpha,您将需要使用getPixel32()而不是 getPixel()。

于 2012-04-30T19:28:59.873 回答
1
//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
}
于 2012-04-30T13:48:52.413 回答