Форум Flasher.ru

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

etc 14.11.2008 23:26

Так, похоже слова плохо доносят смысл. Примерно так:

Код:


private const _ref:FileReference = new FileReference();
private const _loader:Loader = new Loader();
private var _bitmap:BitmapData;



this._ref.addEventListener(Event.SELECT, this.handler_select);
this._ref.addEventListener(Event.COMPLETE, this.handler_selectComplete);
this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handler_complete);

// где-то тут вызвается this._ref.browse();


private function handler_select(event:Event):void {
        this._ref.load();
}

private function handler_selectComplete(event:Event) {
        this._loader.loadBytes(this._ref.data);
}

private function handler_complete(event:Event):void {

        var content:DisplayObject = this._loader.content;

        if (content is Bitmap) {
                this._bitmap = (content as Bitmap).bitmapData;
        } else {
                var bounds:Rectangle = content.getBounds();
                this._bitmap = new BitmapData(bounds.width, bounds.height, true, 0x00000000);
                this._bitmap.draw(content, new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y));
        }

        trace('Say Hello to BitmapData', this._bitmap)
}

Добавлено через 4 минуты
Цитата:

Сообщение от vorbiz (Сообщение 777150)
Разбирусь теперь с тем, что скрипт не может найти fl.containers.UILoader.

Господи, зачем вам левые классы какие-то? Обычный Loader и всё. Обычный BitmapData, никаких декодеров и прочей мути.

musat 14.11.2008 23:34

Код AS3:

package {
        import flash.net.FileReference;
        import flash.net.FileFilter;
        import flash.net.URLRequest;
 
        import flash.events.Event;
 
        import flash.display.Loader;
 
        import flash.display.Bitmap;
        import flash.display.BitmapData;
 
        import flash.utils.ByteArray;
 
        public class Main {
                private var fileRef:FileReference;
                private var imageLoader:Loader;
 
                public function Main() {
                        fileRef = new FileReference();
                        fileRef.addEventListener(Event.SELECT,onFileSelected);
                        var imageTypeFilter:FileFilter = new FileFilter("Изображения (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
                        fileRef.browse([imageTypeFilter]);
                }
 
                private function onFileSelected(evt:Event):void {
                        fileRef.addEventListener(Event.COMPLETE,onComplete);
                        fileRef.load();
                }
 
                private function onComplete(evt:Event):void {
                        var imageData:ByteArray = fileRef.data;
                        imageLoader.loadBytes(imageData);
                        addEventListener(Event.ENTER_FRAME,updateLoadingImage);                // приходится проверять по ENTER_FRAME, загружена ли картинка, т.к. при loadBytes() нет события COMPLETE
                }
 
                private function updateLoadingImage(evt:Event):void {
                        if (imageLoader.content != null) {                                                        // картинка загрузилась
                                removeEventListener(Event.ENTER_FRAME,updateLoadingImage);
                                var imageBitmap:Bitmap = imageLoader.content;
                                var imageBitmapData:BitmapData = imageBitmap.bitmapData; // результат
                        }
                }
        }
}


_etc:
Код AS3:

this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handler_complete);

Хм, не знал, что так можно, вешал событие Event.COMPLETE на сам лоадер, но оно не срабатывало. Я думал, что это баг)

etc 14.11.2008 23:39

musat, событие COMPLETE есть, только подписываться надо у правильного объекта.

vorbiz 14.11.2008 23:41

Все, работает, спасибо огромное.

Добавлено через 2 минуты
Да, действительно, лоадер существует. А зачем, интересно, тогда UILoader? :) В доках, просто, он указан, у меня и с ним заработало :)

etc 15.11.2008 00:28

Читайте доку по UILoader. Это нестандартный класс, как минимум.


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

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