Проблема при создании растрового изображения из фрагмента ролика в AS3 - PullRequest
1 голос
/ 11 октября 2011

У меня проблема при попытке преобразовать фрагмент ролика в растровое изображение.Все работает хорошо, но некоторые атрибуты отсутствуют в новом растровом изображении.

Например, если у меня есть фрагмент ролика, который я переворачиваю (mc.scaleX * = -1), и я его конвертируюв растровом изображении оно не переворачивается.

import flash.geom.Matrix;
import flash.display.BitmapData;
import flash.display.Bitmap;

var box1:Box = new Box();
box1.x = 100;
box1.y = 20;
addChild( box1 );
box1.scaleX *= -1;

var box2:Box = new Box();
box2.x = 300;
box2.y = 20;
addChild( box2 );

var matrix:Matrix = new Matrix( 1, 0, 0, 1, (box1.width / 2), (box1.height / 2) );

var bitmapData:BitmapData = new BitmapData( box1.width, box1.height, true, 0xFFFFFF);
bitmapData.draw(box1, matrix, null, null, null, true);


var bitmap:Bitmap = new Bitmap( bitmapData );
addChild( bitmap );
bitmap.x = 400;
bitmap.y = 300;

Если вы можете проверить этот простой пример, вы поймете, что я имею в виду, «растровое изображение» должно быть перевернуто, а не.за вашу помощь.

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Вам лучше получить матрицу мувиклипа, которую вы хотите преобразовать, и использовать для нее матричные методы, например;

var myMatrix:Matrix = myDisplayObject.transform.matrix;  
myMatrix.scale(1,-1); 
myDisplayObject.transform.matrix = myMatrix;  

var bitmapData:BitmapData = new BitmapData( box1.width, box1.height, true, 0xFFFFFF);
bitmapData.draw(box1, myMatrix, null, null, null, true);

Этот способ проще, поскольку вращение и масштабирование могут быть сложными для установки на матрице.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/geom/Matrix.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6

0 голосов
/ 11 октября 2011

Ни одно из преобразований, которые вы применяете к самому DisplayObject, не будет соблюдаться при draw() его. Если вы хотите масштабировать или перевести это, вы должны сделать это для матрицы преобразования, которую вы предоставляете для вызова отрисовки.

В этом случае изменение инициализации вашей матрицы на это может помочь:

var matrix:Matrix = new Matrix( 1, 0, 0, 1, -(box1.width / 2), (box1.height / 2) );
...