Преобразование гибкого компонента с изображениями в растровое изображение - PullRequest
0 голосов
/ 28 июля 2010

Я пытаюсь перенести изображения, которые помещаю в компонент flex canvas, в растровое изображение. Я смог добраться до точки, где я не получаю сообщение об ошибке, но тогда изображение не появляется, и изображение, которое я сохраняю как jpg, пустое. Я полагаю, что неправильно настраиваю растровые данные, но не могу понять, что я делаю неправильно.

Вот код, в котором я преобразую его в растровое изображение:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop);
   var imageByteArray:ByteArray = imageSnap.data as ByteArray;
   var bLoader:Loader = new Loader();
   bLoader.loadBytes(imageByteArray);

   var bmd:BitmapData = new BitmapData(500,500);
   bmd.draw(bLoader);

   var imgTest:Image = new Image();
   imgTest.source = bmd;
   _renderPop.renderCanvas.addChild(imgTest);



   var fileRef:FileReference = new FileReference();
   fileRef.save(bLoader, 'testImage.jpg');

_renderPop.renderCanvas - это место, где я размещаю изображения. Кто-нибудь видит что-то не так?

Ответы [ 2 ]

1 голос
/ 14 сентября 2012

Ваш код загрузчика неверен.Сразу после захвата изображения вы можете сразу сохранить данные с помощью FileReference:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop);
var fileRef:FileReference = new FileReference();    
fileRef.save(imageSnap.data, 'testImage.png'); 

Этот imageSnap содержит не BitmapData, а байты png изображения.Чтобы показать изображение, вам нужно захватить BitmapData, но не изображение, и создать растровое изображение из растровых данных:

var bmd:BitmapData = ImageSnapshot.captureBitmapData(_renderPop);
var imgTest:Image = new Image();
imgTest.source = new Bitmap(bmd);
_renderPop.renderCanvas.addChild(imgTest); 

В результате локально testImage.png создается в файловой системе и отображается на холсте.Если вам нужен JPG, вы должны указать:

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop, 0, new JPEGEncoder());
0 голосов
/ 28 июля 2010

В вашем коде:

var bLoader:Loader = new Loader();
bLoader.loadBytes(imageByteArray);

... вы предполагаете, что байты загружаются немедленно;попробуйте поместить прослушиватель событий в загрузчик следующим образом:

bLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

private function completeHandler(event:Event):void
{
    // ... the rest of your code goes here
}

Функции loadBytes работают подобно функции load , так как они являются асинхронными процессамипонадобится слушатель событий.Это немного нелогично, и я сам несколько раз совершал одну и ту же ошибку.

Если это не сработает, возможно, пропустите свойство contentLoaderInfo , но приведенное выше должноработа ...

Дайте мне знать, если вы приедете правильно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...