2013-05-08 54 views
2

我有一个很大的JPEG图像文件。它的尺寸是19000 * 14000,文件大小约为41M。我正在使用AIR 3.3 SDK,但加载完成后,我无法在舞台上看到图像。有谁知道这个问题的原因是什么?加载后无法显示非常大的图像

这里是我的代码:

protected function button1_clickHandler(event:MouseEvent):void 
{ 
    file = new File(); 
    file.addEventListener(Event.SELECT, imageFileHandler); 
    file.browseForOpen("image file", [new FileFilter("image file","*.jpg;*.jpeg")]); 
} 

protected function imageFileHandler(event:Event):void 
{ 
    fs = new FileStream(); 
    fs.openAsync(file, FileMode.READ); 
    fs.addEventListener(Event.COMPLETE, bytesComplete); 
} 

protected function bytesComplete(event:Event):void 
{ 
    loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadHandler); 
    var bytes:ByteArray = new ByteArray(); 
    fs.readBytes(bytes); 
    loader.loadBytes(bytes); 
    fs.close(); 
} 

protected function imageLoadHandler(event:Event):void 
{ 
    image.source = (loader.content as Bitmap).bitmapData; 
} 

回答

1

Flash Player和AIR对图像文件大小来显示限制。如果我没有记错,它的4096 * 4096。如果你想使用一个巨大的图像,将其分割成更多,更小的图像,分别加载它们,并逐一放置它们。它就像你想要谷歌地图加载整个地球一样。它只是加载可见部分。你也应该考虑一下。

您还可以尝试调整位图数据的大小,或者是包含它的精灵来使图像可见。

+0

16777216像素总数,8192单维度,更精确。由于来自adobe的[documentation](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html)导致的 – Vesper 2013-05-08 11:41:08

+0

,在空气3之后,图像尺寸没有更多限制。 – 2013-05-08 14:54:29

+1

仍然有限制。从您的链接引用:从AIR 3和Flash Player 11开始,BitmapData对象的大小限制已被删除。 **位图的最大大小现在取决于操作系统。** – csomakk 2013-05-08 15:02:06

1

我敢打赌,你的舞台比实际的图像小。 创建一个和你的舞台一样大的位图数据。 使用BitmapData的copyPixels将像素从大的像素复制到小的像素(当然,您可以贴上x和y的位置)。

请确保在使用copyPixels之前执行bitmapData.lock(),然后再使用unlock()。这些防止无用的更新会导致速度放慢甚至崩溃。 copyPixels是一种“胖”的方法:D

这样你就不必将它分成几块。您可以为enterframe或mousemove添加此更新。