我有一个位图数据,其中包含两种颜色,例如黑色和白色。现在黑色区域是透明的,白色区域是可见的。现在图像应该只能在白色区域而不是黑色透明区域上可点击。我们应该怎么做?
PS:白色区域不在常规位置,我的意思是它们在随机位置。
我有一个位图数据,其中包含两种颜色,例如黑色和白色。现在黑色区域是透明的,白色区域是可见的。现在图像应该只能在白色区域而不是黑色透明区域上可点击。我们应该怎么做?
PS:白色区域不在常规位置,我的意思是它们在随机位置。
Sam 的回答很好,但是既然您说您知道所讨论的像素是位图数据的一部分,您可以跳过拍摄舞台快照而直接检查位图数据。我认为它可以很简单:
stage.addEventListener(MouseEvent.CLICK, eventHandler);
function eventHandler(event:MouseEvent):void
{
if (myBitmapData.getPixel(event.stageX, event.stageY) == 0xffffff)
{
// do something
}
}
此外,如果您想考虑 alpha,您将需要使用getPixel32()而不是 getPixel()。
//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
}