Как преобразовать bytearray в изображение или изображение в bytearray? - PullRequest
6 голосов
/ 25 мая 2009

Как назначить значение bytearray для фонового изображения панели. Если у кого-то есть идея или опыт, пожалуйста, помогите мне преодолеть проблему. КРАТКИЙ ЭКСПЕРТ:

У меня есть панель управления, и я хочу загрузить изображение, полученное с веб-сервиса, в качестве фонового изображения. Так что я использовал setstyle (), но он не принимает это изображение. Итак, как добавить это изображение в фоновое изображение моей панели. Пожалуйста, расскажите мне о ваших идеях здесь.

Ответы [ 7 ]

12 голосов
/ 17 мая 2010

В Flex 3 или выше вам просто нужно сделать:

 yourImage.source = yourByteArray;

привет! * * 1004

4 голосов
/ 25 мая 2009

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

var bytes:ByteArray = myBmp.getPixels(myBmp.rect);

и написать следующее:

myBmp.setPixels(myBmp.rect, bytes);

обратите внимание, что в ByteArray хранятся только необработанные 32-битные пиксельные данные без сжатия, а также размеры исходного изображения.

для сжатия, вы должны обратиться к corelib, как сказал Озке ...

2 голосов
/ 25 мая 2009

Для AS3 вы можете использовать Adobe Corelib. Проверьте этот учебник ... http://ntt.cc/2009/01/09/as3corelib-tutorialhow-to-use-jpegencoder-and-pngencoder-class-in-flex.html

1 голос
/ 06 июня 2009

Я использовал flash.display.Loader () для загрузки изображения в массив. У него есть событие Complete, которое вызывается после загрузки изображения. Затем я рисую изображение на растровом изображении, которое я устанавливаю для данных изображения, которые можно поместить на панель. Надеюсь, что вы можете сделать с этой удачей.

public static function updateImage(img:Image, matrix:Matrix,
                                   pageDTO:PageDTO, bitmapData:BitmapData):void {
    var loader:flash.display.Loader = new flash.display.Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event) : void {
        bitmapData.draw(loader.content, matrix);
        pageViewer.data = new Bitmap(bitmapData);
    });
    loader.loadBytes(pageDTO.thumbnail);
}

<mx:Panel>
    <mx:Image id="pageViewer"/>
</mx:Panel>
1 голос
/ 25 мая 2009

Использование класса Adobe Adobe JPGEncoder (com.adobe.images.JPGEncoder) и ByteArray - это почти все, что вам нужно. Преобразование изображения в байтовый массив (при условии, что CAPS - это переменные, которые вам нужно заполнить):

// -- first draw (copy) the image's bitmap data
var image:DisplayObject = YOUR_IMAGE;
var src:BitmapData = new BitmapData(image.width, image.height);
src.draw(image);

// -- encode the jpg 
var quality:int = 75;
var jpg:JPGEncoder = new JPGEncoder(quality);
var byteArray:ByteArray = jpg.encode(src);
0 голосов
/ 22 февраля 2010

Просто загрузите его в экземпляр Loader с помощью функции loadBytes.

var ldr:Loader = new Loader(); 
ldr.loadBytes(myByteArray); 
addChild(ldr); 
0 голосов
/ 22 июня 2009

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

...