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

2 回答 2

1

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

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

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

于 2013-05-08T11:49:08.223 回答
1

flash player 和 air 对要显示的图像文件大小有限制。如果我没记错的话,它是 4096*4096。如果你想使用一个巨大的图像,把它分割成更多、更小的图像,分别加载,然后一张一张地放置。就像您希望谷歌地图加载整个地球一样。它只加载可见部分。你也应该考虑到这一点。

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

于 2013-05-08T11:12:29.427 回答