ActionScript - getPixel () согласовывает на BitmapData с матрицей преобразования? - PullRequest
0 голосов
/ 24 марта 2011

Я заполнил форму круга данными растрового изображения растрового актива.

Мне нужно повернуть круг от центра, поэтому я добавил растровое изображение в центр круга и использовал матричное преобразование, чтобы сместить растровые данные вверх и влево, чтобы они выглядели по центру.

Теперь я пытаюсь прочитать данные растрового изображения с помощью getPixel(), но возвращаемое значение выключено, поскольку оно возвращает нетрансформированную позицию данных растрового изображения вместо видимых преобразованных растровых данных.

Bitmap(Sprite(evt.currentTarget).getChildAt(0)).bitmapData.getPixel(evt.localX, evt.localY)

как я могу получить точное считывание данных пикселей из растрового изображения с преобразованием матрицы?


обновлено кодом. предположим, что redCircleData в моем примере более красочный и заслуживает получения данных пикселей.

var redCircleData:Sprite = new Sprite();
redCircleData.graphics.beginFill(0xFF0000, 1.0);
redCircleData.graphics.drawCircle(0, 0, 100);
redCircleData.graphics.endFill();

var matrix:Matrix = new Matrix();
matrix.tx = redCircleData.width / 2;
matrix.ty = redCircleData.height / 2;

var myBitmapData:BitmapData = new BitmapData(redCircleData.width, redCircleData.height, true, 0x00FFFFFF);
myBitmapData.draw(redCircleData, matrix);

var theBitmap:Bitmap = new Bitmap(myBitmapData, PixelSnapping.AUTO, true);
theBitmap.x -= matrix.tx;
theBitmap.y -= matrix.ty;

addChild(theBitmap);

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Класс Matrix дает вам очень удобные функции для решения вашей проблемы:

Matrix.invert ();

Matrix.transformPoint ();

Получите обратную матрицу (инвертируйте ее копию), а затем преобразуйте вашу точку (e.localX, e.localY) с ней. Используйте преобразованные точечные координаты в качестве аргументов для getPixel (). BitmapData - это просто блок пикселей RGB или RGBA в памяти, где (0,0) - верхний левый угол. Вам нужно работать в обратном направлении через преобразование, которое вы используете, чтобы отобразить его, чтобы найти пиксель растрового изображения, которое находится под вашей мышью. Вот что для вас делает перевернутая матрица.

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/geom/Matrix.html

0 голосов
/ 24 марта 2011

Я не уверен, возможно ли то, что вы пытаетесь сделать (по крайней мере, я никогда не пробовал, и у меня сложилось впечатление, что вы не можете применить преобразование к BitmapDataобъект, но я могу ошибаться).Однако вы можете создать новый BitmapData со снимком интересующей вас области и прочитать пиксели этого нового объекта.Таким образом, вы можете легко достичь того, что вы хотите.

...