基于无线手持设备的动画压缩及解压方法
技术领域
本发明涉及一种图形压缩及解压方法,特别是一种基于无线手持设备的动画压缩及解压方法。
背景技术
当前,各种便携式电子设备在大家的生活中运用的范围十分广泛,例如移动电话、PDA、掌上电脑等等。随着多媒体技术的不断发展,由于其所具备的多种声光效应,在上述便携式电子设备上播放这些多媒体信息是广大用户所共同期望的。
目前的手机、PDA等无线手持设备还无法同PC机相提并论,在运算性能、读取速度等方面都无法与PC机相比较。而动画的基本要求是要连续播放若干帧,导致动画内容很大不适合传输,所以在保存动画内容的时候,需要进行压缩。
现有的动画压缩方法分为两类:
1.将每一帧内容分别压缩,然后在播放时逐帧解压缩显示出来。此类方法实现简单,但压缩率往往很不理想。
2.将动画内容视为一个整体,将颜色信号与亮度信号以及色度信号分离,然后作有损压缩。
方法一将动画数据作为一幅幅单帧的图片进行压缩,没有考虑帧与帧之间具有的连贯性。方法二对于低配置的无线手持设备来说,运算量太大。
目前无线手持设备中通常的压缩算法是利用帧与帧之间的差异,仅保存相对于前一帧的差异部分,这样动画生成的过程中,会产生许多大小不一的小矩形图片,在播放时由于无线设备处理速度的局限性,造成动画播放速度过慢,而且上述传统的动画压缩方法需要以牺牲动画的颜色深度、牺牲动画的播放质量为代价。但是动画文件由一系列内容相似的图形构成,帧与帧之间通常具有很大的相关性。如何找到帧与帧之间的相关性一直是动画压缩中的一个难点。
发明内容
本发明为克服上述已有技术的不足,本发明要解决的技术问题是提供一种基于无线手持设备的动画压缩及解压方法,以解决高压缩比的动画快速压缩及解压。
为解决上述技术问题,本发明的技术方案是:
一种基于无线手持设备的动画压缩方法,包括以下步骤:
步骤(1)取动画序列的第一帧数据流,并压缩该帧数据;
步骤(2)从第二帧起的数据压缩又包括下列步骤:
(2.1)取一帧动画数据;
(2.2)依次将该帧数据与所述动画序列的前N帧数据作按位异或操
作,得到按位异或后的数据D1、D2、...、DN,其中步长N为正整数;
(2.3)压缩所述N个数据D1、D2、...、DN,得到N个压缩数据
C1、C2、...、CN;
(2.4)压缩该帧的动画原始数据,得到压缩数据P;
(2.5)比较所述N+1个压缩数据C1、C2、...、CN和P的长度,取其中长度最小的压缩数据作为该帧的动画压缩数据;
(2.6)将与此帧作按位异或操作的异或帧编号存储于内存中,若步骤2.5中所述的长度最小的压缩数据是动画原始数据的压缩数据P,则将该原始数据帧的编号存储于内存中。
(2.7)判断动画数据压缩是否结束,如果已结束,转步骤3;如果否,转步骤2.1,继续下一帧数据的压缩;
步骤(3)将各帧压缩数据打包成动画数据文件,包括以下步骤:
(3.1)写动画数据的头文件;
(3.2)存储第一帧动画压缩数据;
(3.3)存储第一帧动画压缩数据长度;
(3.4)取下一帧动画的压缩后数据;
(3.5)存储该帧的动画压缩数据、数据长度、与该帧关联的异或帧编号;
(3.6)如果动画帧已经是最后一帧,则转步骤3.7;否则转步骤3.4;
(3.7)结束。
步骤1、步骤2.3和步骤2.4中使用的是字典压缩算法。
步骤1、步骤2.3和步骤2.4中使用的压缩算法是LZ77、LZSS、LZW、LZA或LZH算法。
步骤2.2中的步长N根据解压缩时无线手持设备可用内存数量来确定,N越大,解压时所需要的临时内存也越大。
步骤2.2中的步长N取值为1~4。
步骤3.1中所述的文件头主要储存动画的基本信息,包括动画文件的标志符、动画的高度、动画的宽度、动画压缩使用的步长、动画的颜色深度。
一种基于无线手持设备的动画解压方法,对应于上述基于无线手持设备的动画压缩方法,该动画解压方法包括以下步骤:
步骤(A)读取动画文件的文件头数据,取得动画的宽度、高度、颜色深度以及步长N;根据步长N以及动画数据的原始长度,准备N个内存数据块,生成一个长度为N的队列,并清空队列,N是正整数;
步骤(B)取第一帧的动画压缩数据,根据压缩时使用的字典压缩算法,调用相应的解压算法得到第一帧的原始数据,将该原始数据根据先进先出原则加入队列;
步骤(C)令正整数n的初始值为2,从第二帧起的数据解压又包括下列步骤:
(C1)取第n帧动画的压缩数据;
(C2)取与第n帧动画的压缩数据对应的异或帧编号;
(C3)通过该异或帧编号获得其对应的异或帧原始数据,即与该第n帧动画相关的关键帧数据,该异或帧原始数据从先进先出队列中找到;
(C4)对该第n帧动画的压缩数据,根据压缩时使用的字典压缩算法,调用相应的解压算法解压动画数据;
(C5)若该第n帧动画的关键帧编号为本身,则转步骤(D),否则,将该第n帧的解压数据与步骤C3中所得的关键帧数据作异或操作,得到该第n帧的原始动画数据,将该第n帧的原始动画数据加入到队列中。步骤(D)判断动画数据解压是否结束,如果已结束,转步骤E;如果否,则n=n+1,转步骤C1,继续下一帧数据的解压;
步骤(E)结束。
所述步骤A、B和C4中的解压方法是与压缩时使用的字典压缩算法相对应的解压算法。
与现有技术相比,本发明的有益效果是:
本发明方法采用帧与帧之间局部两两异或的方法,充分挖掘了动画各帧之间的关联性,提高了压缩比。本发明的另外一个优点是本动画压缩方法不牺牲动画质量,不改变动画原始的颜色深度,压缩过程也完全采用无损压缩算法,最大限度地保留了动画原有的效果。
通过本发明流程实施的动画压缩解压,对一般动画可取得20∶1~40∶1的动画压缩率,而动画的播放也快于现有的其他压缩方法,在工作频率是39MHZ的ARM7TDMI处理器平台,分辨率为320×240像素的QVGA液晶屏幕上播放的彩色动画速度可达10帧/秒,而采用传统方式播放的动画,其动画播放速度只能达到5帧/秒。
本发明既考虑了动画播放的解压效率问题,又兼顾了动画数据大小问题,是无线手持设备中动画播放的一个良好的解决方案。
附图说明
图1是本发明的动画压缩装置图。
图2是本发明的动画解压装置图。
图3是本发明的动画压缩方法的流程图。
图4是本发明的动画文件的数据打包流程图。
图5是本发明的动画解压方法的流程图。
具体实施方式
下面结合附图和实施例对本发明的具体实施方式做进一步详细的说明,但不应以此限制本发明的保护范围。
本发明基于无线手持设备的动画压缩解压方法,其包括以下步骤:
(1)动画压缩装置负责将原始动画数据通过特定的算法压缩成动画数据并打包成动画文件。
(2)动画压缩装置通过输出设备将压缩好的数据传送到无线手持设备的存储器中。
(3)显示时,无线手持设备根据一定的解压算法将动画数据解压、还原,然后送入到显示设备中进行显示。
本发明基于无线手持设备的动画压缩及解压方法的硬件实现平台如图1和图2所示。图1是本发明的动画压缩装置图。动画压缩装置01负责将原始动画数据压缩成动画数据,并打包成动画文件。动画压缩装置通过输出设备02将压缩好的动画数据输出到无线手持设备中,无线手持设备则通过输入设备03将传入的动画数据存入到无线手持设备04的内部存储器中。本发明所指的动画压缩装置可以是一般的普通PC设备,输入输出设备可以采用USB、串行通讯口等。
图2是本发明的动画解压装置图。本发明的动画解压装置采用无线手持设备04,包括键盘12、天线13、射频模块18、语音处理器20,其中央处理器10通过存储在存储器14中的控制程序控制无线手持设备04的所有操作。该控制程序采用了本发明的动画压缩、解压方法。用户预先将压缩好的动画数据通过外部接口设备存储到到存储器14中,外部接口设备可以采用USB、串行通讯口等。当用户需要显示动画时,中央处理器10根据本发明动画解压方法将动画解压到内存11中,然后将动画数据送入显示器16中进行显示。
图3是本发明的动画压缩方法的流程图。如图3所示,本发明基于无线手持设备的动画压缩方法,包括以下步骤:
步骤(1)动画压缩装置首先取动画序列的第一帧数据流,并压缩该帧数据;
步骤(2)从第二帧起的数据压缩又包括下列步骤:
(2.1)取一帧动画数据;
(2.2)依次将该帧数据与所述动画序列的前N帧数据作按位异或操作,得到按位异或后的数据D1、D2、...、DN,其中步长N为正整数;
(2.3)压缩所述N个数据D1、D2、...、DN,得到N个压缩数据C1、C2、...、CN;
(2.4)压缩该帧的动画原始数据,得到压缩数据P;
(2.5)比较所述N+1个压缩数据C1、C2、...、CN和P的长度,取其中长度最小的压缩数据作为该帧的动画压缩数据;
(2.6)将与此帧作按位异或操作的异或帧编号存储到动画压缩装置的临时内存空间中,最终压缩操作完成之后会将压缩数据写入到动画文件中,并清空该内存。若长度最小的是原始数据的压缩数据P,则存储原始数据帧的编号。对于关键帧是原始数据帧的处理,解压时会去寻找该帧对应的异或帧去异或,如果异或帧就是本身,则不需要处理。
(2.7)判断动画数据压缩是否结束,如果已结束,转步骤3;如果否,转步骤2.1,继续下一帧数据的压缩;
步骤(3)图4是本发明的动画文件的数据打包流程图。该动画文件格式由文件头和数据两部分构成。文件头主要储存动画的基本信息,包括动画文件的标志符、动画的高度、动画的宽度、动画压缩使用的步长、动画的颜色深度等等。数据部分主要存储压缩后各帧的数据、数据长度、与该帧关联的异或帧编号等等。
如图4所示,将各帧压缩数据打包成动画数据,包括以下步骤:
(3.1)写动画数据的头文件;所述的文件头主要储存动画的基本信息,包括动画文件的标志符、动画的高度、动画的宽度、动画压缩使用的步长、动画的颜色深度。
(3.2)存储第一帧动画压缩数据;
(3.3)存储第一帧动画压缩数据长度;
(3.4)取下一帧动画压缩数据;
(3.5)存储该帧的动画压缩数据、数据长度、与该帧关联的异或帧编号;
(3.6)如果动画帧已打包结束,转步骤3.7;如果没有,转步骤3.4;
(3.7)结束。
本发明中所涉及的步长的选择N,需要根据解压时无线手持设备可用内存数量而定。一般来说,N越大,解压时所需要的临时内存也越大,压缩比也越高。因此,N的选择需要兼顾具体的无线手持设备的内存大小以及动画分辨率的大小。在小内存环境或者高分辨率的动画,N可选择1或者2,在大内存环境或者低分辨率的动画数据,N可选择3~4或更高,临时运算空间的计算为:N*动画长度*动画宽度*动画颜色深度。以10帧分辨率为240*320,颜色深度为2字节的动画数据来说,解压动画所需要的临时运算空间大小为N*240*320*2字节。
上述步骤1、步骤2.3和步骤2.4中使用的都是字典压缩算法。本发明中所涉及的都是典型的字典压缩算法,包括LZ77、LZSS、LZW、LZA或LZH等多种。上述算法在压缩图形资料时都有一共性,即资料的复杂度和压缩率的关系很大,也就是说,当图形少数颜色的内容占的面积越大,压缩率也越高。针对此特点,本发明将某一帧动画数据与前几帧作一个异或运算,由于异或运算具有如下特点:若两二进制位相同,则取0;反之,则取1。因此,若两个图像的数据相似度越大,则含0的个数越多,压缩率也越高;反之则不然。基于此,本发明通过此算法找出和当前帧最为接近的动画帧,若无法找到与之匹配的最为接近的动画帧,则说明该帧为独立帧,使用原始数据进行压缩。
图5是本发明的动画解压方法的流程图。如图5所示,对应于上述基于无线手持设备的动画压缩方法,本发明基于无线手持设备的动画解压方法,包括以下步骤:
步骤(A)读动画文件的文件头数据,取得动画的宽度、高度、颜色深度以及步长N;压缩时已将这些内容写入到动画文件的文件头数据中,读取动画文件的文件头数据即可得到这些内容。
根据步长N以及动画数据的原始长度,准备N个内存数据块,生成一个长度为N的队列,并清空队列;
步骤(B)取第1帧的动画压缩数据,根据压缩时使用的字典压缩算法,调用相应的解压算法得到第一帧的原始数据,将该原始数据根据先进先出原则加入队列;
步骤(C)令正整数n的初始值为2,从第二帧起的数据解压又包括下列步骤:
(C1)取第n帧动画的压缩数据;
(C2)取与第n帧动画的压缩数据对应的异或帧编号;
(C3)通过该异或帧编号获得其对应的异或帧原始数据,该原始数据可从先进先出队列中找到;
(C4)对该第n帧动画的压缩数据,根据压缩时使用的字典压缩算法,调用相应的解压算法解压动画数据;
(C5)将该第n帧的解压数据与步骤C3中所述的关键帧数据作异或操作,得到第n帧的原始动画数据;
步骤(D)判断动画数据解压是否结束,如果已结束,转步骤E;如果否,则n=n+1,转步骤C1,继续下一帧数据的解压;
步骤(E)结束。
综上所述,本发明实施方式是基于图1和图2所示的硬件平台来实现,既考虑了动画播放的解压效率问题,又兼顾了动画数据大小问题,是无线手持设备中动画播放的一个很好的解决方案。
以上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。