我有一个很大的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;
}
答案 0 :(得分:1)
flash player和air对要显示的图像文件大小有限制。如果我没记错的话,它的4096 * 4096。如果要使用大图像,请将其切片为更多,更小的图像,单独加载,然后逐个放置。它就像你想要谷歌地图加载整个地球。它只是加载可见部分。你也应该考虑这一点。
你也可以尝试调整bitmapdata的大小,或者包含它的sprite,以使图像可见。
答案 1 :(得分:1)
我敢打赌你的舞台比实际图像要小。 创建一个与舞台一样大的bitmapData。 使用BitmapData的copyPixels将像素从大像素复制到小像素(当然可以对x和y位置进行贴图)。
确保在使用copyPixels之前执行bitmapData.lock()并在之后执行unlock()。这些可以防止无用的更新,这些更新会导致速度变慢甚至崩溃。 copyPixels是一种“胖”方法:D
这样您就不必将其拆分。您可以为enterframe或mousemove添加此更新。