将巨型图像加载到Flash中 - 超过BitmapData限制

时间:2011-11-29 08:49:56

标签: flash actionscript-3 flash-player-11

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

不幸的是BitmapData对象的尺寸不能超过 “宽度或高度为8,191像素,总像素数不能 超过16,777,215像素“(见Reference

显然,使用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);
}

1 个答案:

答案 0 :(得分:1)

在我们的应用程序中,使用Flash Player 11.1 r102这可以正常工作。除了在onBytesLoaded处理程序中,我做的事情和你一样。试试这个以查看位图是否实际加载。我测试了一个12,000 x 12,000像素的JPEG(144,000,000像素),它完美地加载(除了非常慢的加载)

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);
}