我目前正在使用AS3核心库中的JPGEncoder
将位图编码为JPEG
var enc:JPGEncoder = new JPGEncoder(90);
var jpg:ByteArray = enc.encode(bitmap);
因为位图相当大(3000 x 2000),编码需要很长时间(大约20秒),导致应用程序在编码时看似冻结。要解决这个问题,我需要:
是否有可能,我该怎么办?
答案 0 :(得分:6)
答案 1 :(得分:2)
答案 2 :(得分:1)
使用Alchemy可以更快地完成任务: http://www.websector.de/blog/2009/06/21/speed-up-jpeg-encoding-using-alchemy/
http://segfaultlabs.com/devlogs/alchemy-asynchronous-jpeg-encoding-2
答案 3 :(得分:1)
您可以使用炼金术编码器。它非常快,您可以异步编码图像。您可以使用此类来抽象它。
public class JPGAlchemyEncoder {
private static var alchemyWrapper:Object;
private var quality:Number;
public function JPGAlchemyEncoder(quality:Number) {
this.quality = quality;
if (!alchemyWrapper){
var loader:CLibInit = new CLibInit;
alchemyWrapper = loader.init();
}
}
public function encode(bitmapData:BitmapData):ByteArray{
var data: ByteArray = bitmapData.clone().getPixels( bitmapData.rect );
data.position = 0;
return alchemyWrapper.write_jpeg_file(data, bitmapData.width, bitmapData.height, 3, 2, quality);
}
public function encodeAsync(bitmapData:BitmapData, completeHandler:Function):void{
var encodedData:ByteArray = new ByteArray();
var data: ByteArray = bitmapData.clone().getPixels(bitmapData.rect);
data.position = 0;
var encodeComplete:Function = function():void{
completeHandler(encodedData);
};
alchemyWrapper.encodeAsync(encodeComplete, data, encodedData, bitmapData.width, bitmapData.height, quality);
}
}
}
答案 4 :(得分:1)
在单独的线程中异步解码png图片,由新版本支持...
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.imageDecodingPolicy = ImageDecodingPolicy.ON_LOAD;
var loader:Loader = new Loader();
loader.load(new URLRequest("...png"),loaderContext);
addChild(loader);
那位官员。