如何检索特定颜色的位图数据的一部分



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

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((。

最新更新