黒と白の2色を含むビットマップデータがあります。これで、黒い領域が透明になり、白い領域が表示されます。これで、画像は白い領域でのみクリック可能になり、黒い透明な領域ではクリックできなくなります。どうすればこれを行うことができますか?
PS: 白い領域は通常の場所ではなく、ランダムな場所にあることを意味します。
黒と白の2色を含むビットマップデータがあります。これで、黒い領域が透明になり、白い領域が表示されます。これで、画像は白い領域でのみクリック可能になり、黒い透明な領域ではクリックできなくなります。どうすればこれを行うことができますか?
PS: 白い領域は通常の場所ではなく、ランダムな場所にあることを意味します。
サムの答えは素晴らしいですが、問題のピクセルがビットマップデータの一部であることを知っていると言うので、ステージのスナップショットをスキップして、代わりにビットマップデータを直接確認することができます. 次のように簡単にできると思います:
stage.addEventListener(MouseEvent.CLICK, eventHandler);
function eventHandler(event:MouseEvent):void
{
if (myBitmapData.getPixel(event.stageX, event.stageY) == 0xffffff)
{
// do something
}
}
また、アルファを考慮したい場合は、getPixel()の代わりに getPixel32() を使用する必要があります。
//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
}