Actionscript 压缩位图数据

Actionscript 压缩位图数据,actionscript,compression,bitmapdata,Actionscript,Compression,Bitmapdata,情况是这样的: 我编写了一个简单的MovieClip替换,它将现有导入的MovieClip转换为一系列位图数据。这样就不需要Flash在每一帧的MovieClip中渲染矢量数据 但是BitmapData占用了大量内存。我尝试过将BitmapData转换为ByteArray并使用compress()方法。这将大大减少内存占用。但事实证明这是不切实际的。对于每次重画,我都会尝试解压缩字节数组,然后使用SetPixels将数据blit到屏幕上,然后重新压缩帧。这是可行的,但速度非常慢 所以我想知道是否

情况是这样的:

我编写了一个简单的MovieClip替换,它将现有导入的MovieClip转换为一系列位图数据。这样就不需要Flash在每一帧的MovieClip中渲染矢量数据

但是BitmapData占用了大量内存。我尝试过将BitmapData转换为ByteArray并使用compress()方法。这将大大减少内存占用。但事实证明这是不切实际的。对于每次重画,我都会尝试解压缩字节数组,然后使用SetPixels将数据blit到屏幕上,然后重新压缩帧。这是可行的,但速度非常慢

所以我想知道是否有其他人有我可以尝试的方法。在闪存中,是否可以压缩内存中的位图数据并快速将其显示在屏幕上

我想知道本地动画GIF在Flash中是如何工作的。它是在后台将其解压缩到位图数据,还是在动态情况下进行帧解压缩

也许有一个炼金术项目试图对压缩图像进行blit处理


感谢您提供的任何建议:)

对于内存保留,在将MovieClip转换为位图序列之前,您需要三思。真的有这种需要吗?你能把事情分解一下吗?因为有一些事情(比如背景)是静态的(或者只是移动)为什么不缓存每个元素的位图而不是一个大的位图序列

我通常只对小尺寸的动画图标和其他繁重的计算内容(如火焰/烟雾效果…)使用AnimatedBitmap(MovieClip的位图序列替代名称)。尽可能地把事情分解

据我所知,没有办法压缩位于内存中的位图数据所使用的内存,也没有任何与炼金术相关的东西可以帮助改善这种情况下使用的内存


动画GIF无法在Flash中本机运行,您需要一些库来实现这一点。从bytearray.com搜索AnimatedGIF as3库,实际上该库只是读取原始bytearray中的gif文件,并将其转换为动画位图,就像您所做的那样。

@thienhaflash的响应很好,但已经老化了一年,从那时起,Flash Player和AIR Runtime已经扩展了它们的功能。今天我无意中听到了一则来自美国的小新闻。从播放器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);

不确定blitting的实用性,但它可以在本地完成很好。

这是一个老问题,但最近有相关信息:jackson Dunstan使用bitmapdatas运行过,结果表明,从压缩源获得的位图数据在使用一段时间后将“压缩”。 以下是文章:,以及开头提到的两篇文章

所以你完全可以这样做:

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
在您尝试读取时将被解压缩,然后在大约十秒钟内不使用时重新压缩。

了解这一点非常有用。我不知道这种行为是否在手机上出现,我真的不知道,但我不明白为什么会有什么不同。