Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Bitmap -> ByteArray -> Bitmap (http://www.flasher.ru/forum/showthread.php?t=122858)

exeron 19.03.2009 20:57

Bitmap -> ByteArray -> Bitmap
 
Подскажите, пожалуйста, как выполнить данное преобразование.
Пробовал:
Код AS3:

byteArrayToBitmapData(ldr.content.loaderInfo.bytes);
 
private function byteArrayToBitmapData(ba:ByteArray):void {
        loader = new Loader()
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData);
        loader.loadBytes(ba);
      }
      private function getBitmapData(event:Event):void {
                      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, getBitmapData);
    myBmp = event.target.content; <<< Здесь возникает ошибка
      }


Psycho Tiger 19.03.2009 21:04

А если с кастингом?

exeron 19.03.2009 21:08

Цитата:

Сообщение от Psycho Tiger (Сообщение 806994)
А если с кастингом?

Если имеется ввиду:
Код AS3:

 myBmp = Bitmap(event.target.content);

То результат тот же (.

badun 19.03.2009 23:15

смотри внимательнее, target это contentLoaderInfo, а не loader
в твоем случае надо обращаться к содержимому так: event.target.loader.content - но про кастинг лучше не забывай

exeron 20.03.2009 07:19

1. Не работает.
2. Если прогнать под отладчиком - то event.target.content это один в один event.target.loader.content
Может ошибка в том как я получаю ByteArray?
Код AS3:

private function completeIMG(event:Event):void {
  .....
  ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeIMG);
 // byteArrayToBitmapData(ldr.content.loaderInfo.bytes);  <<
  myBmp = event.target.content; << если так все ок
}


silin 20.03.2009 09:33

>>Может ошибка в том как я получаю ByteArray?
похоже, что так
затрудняюсь сказать почему, но когда скармливаем лоадеру loaderInfo.bytes, то получаем в его content'е MovieClip
а если загрузить картинку как бинарник, то все нормально - имеем Bitmap
Код AS3:

package 
{
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.utils.ByteArray;
 
        public class Main extends Sprite
        {
                private var loader:Loader = new Loader();
                private var loader1:Loader = new Loader();
                private var urlLoader:URLLoader = new URLLoader();
                public function Main():void
                {
 
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeIMG);
                        loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, completeDecode);
                        urlLoader.addEventListener(Event.COMPLETE, completeData);
                        urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                        //loader.load(new URLRequest("face0.jpg"));//то, что происходит у автора
                        urlLoader.load(new URLRequest("face0.jpg"));//работающий вариант
                }
 
                private function completeData(evnt:Event):void
                {
                        var ba:ByteArray = urlLoader.data;
                        loader1.loadBytes(ba);
                }
 
                private function completeIMG(evnt:Event):void
                {
                        var ba:ByteArray = loader.content.loaderInfo.bytes;
                        loader1.loadBytes(ba);
                }
 
                private function completeDecode(evnt:Event):void
                {
                        var myBmp : DisplayObject = loader1.content as DisplayObject;
                        trace( "myBmp : " + myBmp );
                        //[object MovieClip] если отдавать loaderInfo.bytes;
                        //[object Bitmap] если отдавать urlLoader.data;
                }
 
        }
 
}

ps.
к слову сказать: в AVM1 jpg, загруженный с помощью MovieClipLoader.loadClip или MovieClip.load, тоже никакого отношения к графике уже не имел

exeron 20.03.2009 09:58

В принципе, для решения моей задачи - приемлемый вариант. Спасибо, silin.

badun 20.03.2009 11:30

Цитата:

Сообщение от exeron (Сообщение 807083)
1. Не работает.
2. Если прогнать под отладчиком - то event.target.content это один в один event.target.loader.content

Ага, ступил.

Цитата:

Сообщение от silin (Сообщение 807090)
затрудняюсь сказать почему, но когда скармливаем лоадеру loaderInfo.bytes, то получаем в его content'е MovieClip

Забавно :). При чем этот MovieClip содержит единственного ребенка, тот самый искомый Bitmap.


Часовой пояс GMT +4, время: 20:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.