Не удается получить растровые данные из отброшенного изображения в Flex Air AS3 - PullRequest
0 голосов
/ 04 апреля 2011

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

В режиме отладки, когда я просматриваю свойства файла, данные устанавливаются в NULL.

Что я здесь не так делаю? В моем коде file.data ничего мне не дает.

protected function creationCompleteHandler(event:FlexEvent):void
{
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn);
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDrop);
    NativeDragActions.COPY;
}

        private function onDrop(e:NativeDragEvent):void
        {
            trace("Dropped!");

            var dropfiles:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
            for each (var file:File in dropfiles){
                switch (file.extension.toLowerCase()){
                    case "png" :
                        trace('png');
                        //resizeImage(file.nativePath);
                        break;
                    case "jpg" :
                        trace('jpg');
                        //resizeImage(file.nativePath);
                        break;
                    case "jpeg" :
                        trace('jpeg');
                        //resizeImage(file.nativePath);
                        break;
                    case "gif" :
                        resizeImage(file.nativePath);
                        break;
                    default:
                        Alert.show("choose an image file!");
                }
            }
        }

1 Ответ

0 голосов
/ 11 мая 2011

сначала нужно загрузить байтовый массив:

var ba:ByteArray = new ByteArray();
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
stream.readBytes(ba);
stream.close();

, затем загрузить растровое изображение, используя:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fileLoaded);
loader.loadBytes(ba);

, наконец, получить растровое изображение

private function fileLoaded(event:Event):void {
    var bitmap:Bitmap = Bitmap(event.target.content);

    // finally you have:   bitmap.bitmapData

    // cleanup
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fileLoaded);
}
...