情况是这样的:
我已经编写了一个简单的MovieClip替换,它可以将现有的导入MovieClip转换为一系列BitmapData。这样就不需要Flash在每一帧的MovieClip中呈现矢量数据了。
但是BitmapData占用了大量的内存。我尝试过将BitmapData转换为ByteArray并使用compress()方法。这会显著减少内存占用。但事实证明这是不切实际的。对于每次重绘,我尝试解压缩() ByteArray,然后使用SetPixels将数据块到屏幕上,然后重新压缩()帧。
所以我想知道其他人是否有我可以尝试的方法。在Flash中,有没有可能压缩内存中的位图数据并快速将其显示在屏幕上?
我想知道原生动画GIF在Flash中是如何工作的。它是在幕后将它们解压缩成BitmapData,还是在运行过程中进行帧解压缩?
也许有一个炼金术项目试图对压缩图像进行blit?
感谢您能提供的任何建议:)
发布于 2012-12-13 04:21:57
@thienhaflash的反应很好,但已经老化了一年,从那时起,Flash Player和AIR Runtime扩展了它们的功能。今天我偶然发现了Adobe's AS3 Guide上的这个小花边新闻。从播放器11.3开始,可以使用本机图像压缩技术。下面是一段代码:
// Compress a BitmapData object as a JPEG file.
var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00);
var byteArray:ByteArray = new ByteArray();
bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);不确定but的实用性,但它可以在本地完成,这很好。
发布于 2011-06-24 11:01:06
对于内存保留,在将MovieClip转换为位图序列之前需要三思而后行。真的有这个需要吗?既然有几个东西(比如背景)是静态的(或者只是移动的),为什么不为每个元素缓存位图,而是一个大的位图序列呢?
我通常只对小尺寸的动画图标和其他繁重的计算内容(如火/烟效果...)使用AnimatedBitmap (MovieClip的位图序列替代名称)。尽你所能把事情分解吧!
据我所知,没有办法压缩位于内存中的BitmapData使用的内存,也没有任何与炼金术相关的东西可以帮助改善这种情况下使用的内存。
动画GIF本身不能在Flash中工作,你需要一些库来做到这一点。从bytearray.com搜索AnimatedGIF as3库,实际上这个库只是读取原始byteArray中的gif文件并转换为animatedBitmap,就像您所做的那样。
发布于 2013-02-02 19:23:37
这是一个古老的问题,但最近有关于这方面的信息:杰克逊·邓斯坦曾经使用过bitmapdatas,事实证明,从压缩源获得的Bitmap数据在一段时间未使用后将“收缩”。下面是文章:http://jacksondunstan.com/articles/2112,以及开头提到的两篇文章。
所以你完全可以这样做:
var byteArray:ByteArray = new ByteArray();
myBitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);
var loader = new Loader();
loader.addEventListener(Event.COMPLETE, function(_e:Event):void{
if(loader.content is Bitmap){
myBitmapData.dispose()
myBitmapData= Bitmap(loader.content).bitmapData;
}
});
loader.loadBytes(byteArray);我不确定它是否会按原样工作,你肯定想更好地处理你的内存。但现在,当你尝试读取myBitmapData时,它将被解压缩,当你大约10秒不使用它时,它将被重新压缩。
https://stackoverflow.com/questions/6435855
复制相似问题