2

我试图让用户将巨型图像导入 Flash 应用程序。

不幸的是,BitmapData 对象的尺寸不能超过“宽度或高度 8,191 像素,像素总数不能超过 16,777,215 像素”(请参阅​​参考资料

显然,使用 FlashPlayer11,这些限制消失了 - 但是:由于我只从 FileReference 获取字节,我需要通过 Loader.loadBytes() 转换这些字节,以访问图像数据。这似乎不适用于超出旧 BitmapData 限制的图像。

有谁知道,是什么导致了这个问题/如何解决?

function onAddButtonClicked(e:MouseEvent = null):void {
    trace("Opening file");
    _frl = new FileReferenceList();
    _frl.addEventListener(Event.SELECT, onFilesSelected);
    _frl.browse([new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png")]);
}
//When user has selected the files
 function onFilesSelected(e:Event):void {
    for each (var item:FileReference in _frl.fileList) {
        item.load();
        item.addEventListener(Event.COMPLETE, onFileLoaded);
    }

}

//When files are loaded into the application
 function onFileLoaded(e:Event):void {
    trace("File Loaded!");
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesLoaded);
    loader.loadBytes(e.target.data);
}

//When files are finally available as Loader/Image
 function onBytesLoaded(e:Event):void {
    addChild((e.target as LoaderInfo).loader);
}
4

1 回答 1

1

In our app, with Flash Player 11.1 r102 this is working ok. I do everything the same as you except for in the onBytesLoaded handler. Try this to see if the bitmap is actually loading. I tested with a 12,000 x 12,000 pixel JPEG (144,000,000 total pixels) which loaded perfectly (besides being terribly slow to load)

function onBytesLoaded(e:Event):void {
    var ldr:Loader = Loader(e.target.loader);

    var bmp:Bitmap = Bitmap(ldr.content);
    trace("Bitmap Loaded: " + bmp.width + "x" + bmp.height);

    var img:Image = new Image();
    img.source = bmp;
    addChild(img);
}
于 2011-11-29T09:21:08.353 回答