8

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

4

1 回答 1

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 过程是异步的。此外,当您使用不可解析的字节数组尝试它时(通常是第一次调用 onProgress,当没有足够的图像数据要处理时)它会静默失败,因此您需要以某种方式保证您有足够的数据......在这种情况下我使用如果(字节。长度> 4096);)

于 2012-07-01T17:12:00.487 回答