Вот еще более простая реализация. Все, что вам нужно сделать, это сделать снимок сцены с помощью метода draw () bitmapData, а затем использовать getPixel () на пикселе под мышью. Преимущество этого состоит в том, что вы можете отобрать все, что было нарисовано на сцене, а не только заданное растровое изображение.
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
stage.addEventListener(MouseEvent.CLICK, getColorSample);
function getColorSample(e:MouseEvent):void {
var bd:BitmapData = new BitmapData(stage.width, stage.height);
bd.draw(stage);
var b:Bitmap = new Bitmap(bd);
trace(b.bitmapData.getPixel(stage.mouseX,stage.mouseX));
}
Надеюсь, это полезно!
Редактировать
Эта отредактированная версия использует один BitmapData
и удаляет ненужный шаг создания Bitmap
. Если вы выбираете цвет на MOUSE_MOVE
, это важно, чтобы избежать проблем с памятью.
Примечание: если вы используете пользовательский спрайт курсора, вам придется использовать объект, отличный от 'state', иначе вы будете выбирать цвет пользовательского спрайта вместо того, что находится под ним.
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
private var _stageBitmap:BitmapData;
stage.addEventListener(MouseEvent.CLICK, getColorSample);
function getColorSample(e:MouseEvent):void
{
if (_stageBitmap == null) {
_stageBitmap = new BitmapData(stage.width, stage.height);
}
_stageBitmap.draw(stage);
var rgb:uint = _stageBitmap.getPixel(stage.mouseX,stage.mouseY);
var red:int = (rgb >> 16 & 0xff);
var green:int = (rgb >> 8 & 0xff);
var blue:int = (rgb & 0xff);
trace(red + "," + green + "," + blue);
}