1

黒と白の2色を含むビットマップデータがあります。これで、黒い領域が透明になり、白い領域が表示されます。これで、画像は白い領域でのみクリック可能になり、黒い透明な領域ではクリックできなくなります。どうすればこれを行うことができますか?

PS: 白い領域は通常の場所ではなく、ランダムな場所にあることを意味します。

4

2 に答える 2

1

サムの答えは素晴らしいですが、問題のピクセルがビットマップデータの一部であることを知っていると言うので、ステージのスナップショットをスキップして、代わりにビットマップデータを直接確認することができます. 次のように簡単にできると思います:

stage.addEventListener(MouseEvent.CLICK, eventHandler);

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

また、アルファを考慮したい場合は、getPixel()の代わりに getPixel32() を使用する必要があります。

于 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 に答える