在加载过程中在Flash中显示渐进式JPEG

时间:2012-06-28 14:59:22

标签: actionscript-3 flash jpeg progressive

我需要以渐进式JPEG格式显示图像(http://en.wikipedia.org/wiki/JPEG#JPEG_compression,不要与顺序JPEG的逐行显示混淆)。 Flash支持加载渐进式JPEG,但我不知道如何在加载过程中显示它。简短的谷歌搜索让我逐步加载顺序JPEG,没有别的。

1 个答案:

答案 0 :(得分:4)

它会是这样的:

// the loader containing the image
var loading:Boolean = false;
var loader:Loader = new Loader();
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function() {
    loading = false;
    trace(loader.width, loader.height);
});

var bytes:ByteArray = new ByteArray();

var stream:URLStream = new URLStream();
stream.addEventListener(ProgressEvent.PROGRESS, onProgress);
stream.addEventListener(Event.COMPLETE, onProgress);
stream.load(new URLRequest(imageURL));

function onProgress(e:Event):void {
    stream.readBytes(bytes, bytes.length);
    if((bytes.length > 4096 && !loading) || e.type == Event.COMPLETE) {
        loading = true;
        loader.loadBytes(bytes);
    }
}

请注意,loadBytes进程是异步的。此外,当您使用不可解析的bytearray(通常是第一次调用onProgress,当没有足够的图像数据要处理)尝试它时,它会无声地失败,因此您需要以某种方式保证您有足够的数据...在这种情况下我使用 if(bytes.length> 4096);)