我试图让用户将巨型图像导入到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);
}
答案 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);
}