CN101635141A - 一种位图文件的快速解压方法 - Google Patents
一种位图文件的快速解压方法 Download PDFInfo
- Publication number
- CN101635141A CN101635141A CN200910033607A CN200910033607A CN101635141A CN 101635141 A CN101635141 A CN 101635141A CN 200910033607 A CN200910033607 A CN 200910033607A CN 200910033607 A CN200910033607 A CN 200910033607A CN 101635141 A CN101635141 A CN 101635141A
- Authority
- CN
- China
- Prior art keywords
- bitmap
- function
- buffer zone
- width
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
本发明涉及一种位图文件的快速解压方法,包括:步骤1,将比屏幕大的位图等比压缩到屏幕的大小;步骤2,设置三个缓冲区,分别用于保存压缩后的当前位图、当前位图的前一幅位图以及当前位图的后一幅位图;步骤3,同时执行前台显示任务和后台解压任务。本发明的快速解压方法基于抽丝、多缓存、多任务的图片解压技术,能够实现以快于图片解压速度响应前一幅或下一幅图片显示功能,从而使大分辨率位图文件浏览功能达到实用程度。
Description
技术领域
本发明涉及一种文件解压方法,更具体地,涉及一种基于抽丝、多缓存、多任务技术的大分辨率位图文件(bitmap)的快速解压方法。
背景技术
目前的电视机以及视频显示装置大多提供图片显示功能,但因为绝大多数电视机中的电视信号视频处理芯片采用的嵌入式CPU性能限制(一般主频在400MHz以下),所以无法提供大分辨率的位图(bitmap)文件显示功能。而部分可以实现此功能的,也采用的是单任务、单缓存的图片解压方式。
单任务、单缓存的图片解压方式就是显示和解压都是一个线程实现的,解压完成之后,才能进行图片显示,解压和显示两项工作之前有先后次序关系,必须串行,同时因为串行进行,所以只需要采用单缓存即可。但是,当在当前显示的图像与上一幅或者下一幅图像之间进行切换时,以1幅4000*3000分辨率的位图文件为例,在CPU主频为400MHz的情况下,其解压时间在20秒左右,如果采用单缓存、单任务机制,两幅图片显示时间间隔至少为20秒。可见,这种解压方式解压效率低,解压时间过长,形成方案实用性不强。
因此,需要一种位图(bitmap)文件的快速解压方法,能够适用于数字电视机等视频显示系统,能够使数字电视机提供更具实用性的位图(bitmap)文件显示功能。
发明内容
为了解决上述技术问题,本发明提供了一种位图文件的快速解压方法,该方法基于抽丝、多缓存、多任务的图片解压技术,能够快速实现大分辨率位图(bitmap)文件的快速解压。
本发明的技术方案如下:
一种位图文件的快速解压方法,包括:
步骤1,将比屏幕大的位图等比压缩到屏幕的大小;
步骤2,设置三个缓冲区,其中所述三个缓冲区分别用于保存压缩后的当前位图、当前位图的前一幅位图以及当前位图的后一幅位图;
步骤3,同时执行前台显示任务和后台解压任务;其中所述前台显示任务将保存当前位图的缓冲区的数据拷贝到显示层的缓冲区,所述后台解压任务用于解压压缩后的位图,并根据当前位图的显示方式将数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区。
其中,步骤1采用“抽丝”算法来压缩位图。所述“抽丝”算法包括以下步骤:对比位图和屏幕的宽、高比例,确定要按位图高度进行压缩还是要按照位图宽度进行压缩,确定压缩比例;根据压缩比例,计算出压缩后位图的高度和宽度;如果按位图高度进行压缩,则根据压缩前、后的位图高度,使被抽取的行均匀分布,对每一列位图抽取不用的行;如果按位图宽度进行压缩,则根据压缩前、后的位图宽度,使被抽取的列均匀分布,对每一行位图抽取不用的列。
其中,如果位图高度比例大于宽度比例的情况下,要按照位图高度进行压缩;位图宽度比例大于高度比例的情况下,要按照位图宽度进行压缩。
其中,步骤2进一步包括:设置位置变量curPictureIndex以及多缓冲接口函数,其中所述位置变量curPictureIndex指示保存当前位图的数据的缓冲区位置;所述多缓冲接口函数用于根据当前位图显示方式切换缓冲区。
所述多缓冲接口函数包括函数SwitchBuf、GetDecodeBuf和GetShowBuf;其中所述函数SwitchBuf用于根据当前的位图显示方式更新位置变量curPictureIndex;所述函数GetDecodeBuf用于根据当前位图显示方式获得下一次解压将使用的缓冲区,函数GetShowBuf用于获得当前显示位图的缓冲区。
其中,步骤3进一步包括:设置位图显示回调函数DMPAL_ShowPicture和解压任务回调函数DMPAL_DecodePicture;其中,所述位图显示回调函数DMPAL_ShowPicture用于将保存当前位图的缓冲区的数据拷贝到显示层的缓冲区;解压任务回调函数DMPAL_DecodePicture用于将解压的位图数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区。
其中,位图显示回调函数DMPAL_ShowPicture通过调用所述函数GetShowBuf获得当前位图的缓冲区;解压任务回调函数DMPAL_DecodePicture通过调用所述函数GetDecodeBuf获得解压的位图数据写入的缓冲区。
更进一步地,在步骤3中,所述后台解压任务在位图解压完成后,向前台显示任务释放解压完成信号量;
所述前台显示任务在当前位图显示完成后,切换所述缓冲区,并向后台解压任务释放开始解压信号。具体地,设置一定时器,当前位图显示完成一定时间后由定时器发出开始显示信号量,启动切换所述缓冲区。
通过本发明的基于抽丝、多缓存、多任务的图片解压方法,能够实现以快于图片解压速度响应前一幅或下一幅图片显示功能,从而使大分辨率位图文件浏览功能达到实用程度。不仅可实现大分辨率位图的快速解压和显示功能,还可以采用软件方式实现大分辨率Bitmap文件快速解压,从而提供更具竞争力的数字电视Bitmap图片浏览功能。
附图说明
下面结合附图和具体实施方式对本实用新型作进一步详细的说明。
图一是本发明实施例抽丝算法流程框图。
图二是本发明实施例多缓存、多任务技术功能框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合实施例及实施例附图对本发明作进一步详细的说明。
本发明的快速解压方法是一种基于抽丝、多缓存、多任务的位图解压技术,采用软件方式实现大分辨率位图(bitmap)文件的快速解压功能。
本发明的快速解压方法包括以下步骤:
步骤1,将比屏幕大的位图等比压缩到屏幕的大小。具体包括:对比位图和屏幕的宽、高比例,确定要按高度进行压缩(高度比例>宽度比例情况下),还是要按照宽度进行压缩(宽度比例>高度比例情况下),确定压缩比例。根据压缩比例,计算出压缩后的高度和宽度。如果按照高度进行压缩,根据压缩前、后高度,按照抽取行均匀分布原则,利用“抽丝”算法,除去不用的行。反之,如果按照宽度进行压缩,则根据压缩前、后宽度,按照抽取列均匀分布原则,利用“抽丝”算法,对每一行抽取不用的列。对保留数据进行解压,获得图像的有效数据。
所述抽丝算法可具体参见附图1。附图1是本发明抽丝算法的流程框图。这里设定原始图像高度(宽度)为m,抽丝解压后的图像高度(宽度)为n。抽丝算法基本处理过程如下:
S101:获得原始图像宽度(高度)m和图像抽丝解压后的宽度(高度)n;
S102:根据原始图像高度(宽度),定义一个含m个元素的数组pointer,
S103:将数组所有元素的初始值设为1,表示默认情况下,所有行(列)数据均需要进行解压;
S104:利用公式m-n获得需要抽掉行数(列数),该变量记为lose_num;
S105:利用公式m/(lose_num+1)计算需要隔多少行(列)抽调一行数据,该变量记为len_line,考虑到计算时边缘效应,该变量定义时需定义成double类型,因为len_line为double类型;
S106:计算len-line+0.5再取整,得出的整数就是要舍弃的间隔数,记为dx。此步骤是为了消除边缘效应。
S107:这样则被舍弃行(列)就是:pointer[dx],pointer[2*dx],pointer[3*dx],...;将舍弃行(列)对应的数组pointer元素值变为0;
S108:图像解压时,根据元素数组pointer的元素值进行判断对应行(列)是否需要进行解压,元素值为1的行(列)进行解压,元素值为0的行(列)跳过。
本步骤的目的是为了有效解决在有限显示区域即屏幕范围内,在图像不失真前提下,完整显示大分辨率图像,即解决图像分辨率大于屏幕范围的问题。
步骤2,设置三个缓冲区,其中所述三个缓冲区分别用于保存压缩后的当前位图、当前位图的前一幅位图以及当前位图的后一幅位图。具体包括:
设置位图缓存区unsigned char*pPictureBuf[3];
设置位置变量int curPictureIndex,用于指示保存当前位图的数据的缓冲区位置;
设置多缓存接口函数,包括:
(1)函数SwitchBuf
函数SwitchBuf根据当前位图显示方式更新位置变量curPictureIndex,获得当前需显示的位图位置。函数SwitchBuf的定义为:
void SwitchBuf(int showpictype)
{
curPictureIndex=(showpictype==pre)?(curPictureIndex-1):
(curPictureIndex+1);
if(curPictureIndex>2)
curPictureIndex=0;
if(curPictureIndex<0)
curPictureIndex=2;
}
其中curPictureIndex为上面所述的位置变量;showpictype表示当前位图显示方式。
(2)函数GetDecodeBuf
函数GetDecodeBuf定义为:
Unsigned char*GetDecodeBuf(int showpictype)
{
int temp=(showpictype==pre)?(curPictureIndex-1):
(curPictureIndex+1);
if(temp>2)
temp=0;
if(temp<0)
temp=2;
return pPictureBuf[temp];
}
其中pPictureBuf为上面所述的缓冲区,curPictureIndex为上面所述的位置变量;showpictype表示当前位图显示方式;temp为函数内的临时变量。
函数GetDecodeBuf根据当前位图显示方式获得下一次解压将使用的缓冲区。
(3)函数GetShowBuf
函数GetShowBuf定义如下:
Unsigned char*GetShowBuf()
{
return pPictureBuf[curPictureIndex];
}
其中pPictureBuf为上面所述的缓冲区,curPictureIndex为上面所述的位置变量。
函数GetShowBuf用于获得当前显示位图的缓冲区。
在执行过程中,通过调用以上多缓冲接口函数,根据当前位图显示方式,在三个缓冲区之间切换保存当前显示位图数据的缓冲区,以及保存下一次解压的位图数据所使用的缓冲区。
步骤3,同时执行前台显示任务和后台解压任务;其中所述前台显示任务将保存当前位图的缓冲区的数据拷贝到显示层的缓冲区,所述后台解压任务用于解压压缩后的位图,并根据当前位图的显示方式将数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区。
在步骤3中,设置显示任务回调函数为DMPAL_ShowPicture以及解压任务回调函数DMPAL_DecodePicture。其中:
显示任务回调函数DMPAL_ShowPicture涉及与显示层数据交互机制,将保存当前显示位图的缓冲区中的数据通过内存拷贝方式(memcpy)拷贝到代表显示层的缓冲区。
解压任务回调函数DMPAL_DecodePicture用于将解压的位图数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区,其具体定义如下:
int DMPAL_DecodePicture(unsigned char*pPictureBuf,char*filename)
{
//以只读方式打开文件
//读取位图文件头部信息,获得图像宽度w、高度h、颜色深度信息
//根据图像颜色深度和宽度信息计算获得一行数据需要内存空间
//申请一行数据空间
for(i=0;i<h;i++)
{
if(当前行被抽丝)
break;
//读取一行数据
for(j=0;j<w;j++)
{
if(当前列被抽丝)
break;
//当前行数据中的当前列元素写入pPictureBuf
}
}
//释放申请空间
//关闭文件
}
其中,pPictureBuf为上面所述的缓冲区,filename为需解压的位图文件的文件名。
步骤3中前台显示任务和后台解压任务的具体执行过程如附图2所示,包括以下步骤:
S201:创建前台显示任务,并释放开始显示信号量;
S202:创建后台解压任务,并释放开始解压信号量;
S203:前台显示任务等待解压完成信号量;
S204:后台解压任务等待开始解压信号量;
S205:后台解压任务在收到开始解压信号量后,开始位图解压过程;
S206:后台解压任务在位图解压完成后,释放解压完成信号量;
S207:前台显示任务在收到解压完成信号量之后,等待开始显示信号量;
S208:接收到开始显示信号量后,调用上述多缓冲接口函数,切换缓冲区;
S209:释放所述开始解压信号量,使后台解压程序开始下一幅图片的解压;
S210:执行当前显示位图的显示;
S211:显示完毕,启动定时器;
S212:定时器时间到后,释放开始显示信号量,从而开始下一幅位图的显示。
在以上任务的执行过程中,可通过退出按键结束任务。
本发明主要实现以快于图片解压速度响应前一幅或下一幅图片显示功能。利用上述三个缓冲区,通过同时执行前台显示任务和后台解压任务,可以实现两幅图片显示时间间隔小于10S,从而使大分辨率位图文件浏览功能达到实用程度。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求所界定的保护范围为准。
Claims (10)
1.一种位图文件的快速解压方法,其特征在于,包括:
将位图等比压缩到屏幕的大小;
设置三个缓冲区,其中所述三个缓冲区分别用于保存压缩后的当前位图、当前位图的前一幅位图以及当前位图的后一幅位图;
同时执行前台显示任务和后台解压任务;其中所述前台显示任务将保存当前位图的缓冲区的数据拷贝到显示层的缓冲区,所述后台解压任务用于解压压缩后的位图,并根据当前位图的显示方式将数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区。
2.根据权利要求1所述位图文件的快速解压方法,其特征在于:所述等比压缩采用“抽丝”算法,所述“抽丝”算法包括以下步骤:对比位图和屏幕的宽、高比例,确定要按位图高度进行压缩还是要按照位图宽度进行压缩,确定压缩比例;根据压缩比例,计算出压缩后位图的高度和宽度;如果按位图高度进行压缩,则根据压缩前、后的位图高度,使被抽取的行均匀分布,对每一列位图抽取不用的行;如果按位图宽度进行压缩,则根据压缩前、后的位图宽度,使被抽取的列均匀分布,对每一行位图抽取不用的列。
3.根据权利要求2所述位图文件的快速解压方法,其特征在于:如果位图高度比例大于宽度比例的情况下,按照位图高度进行压缩;位图宽度比例大于高度比例的情况下,按照位图宽度进行压缩。
4.根据权利要求1所述位图文件的快速解压方法,其特征在于:所述解压方法还包括:
设置位置变量curPictureIndex以及多缓冲接口函数,其中所述位置变量curPictureIndex指示保存当前位图的数据的缓冲区位置;所述多缓冲接口函数用于根据当前位图显示方式切换缓冲区。
5.根据权利要求4所述位图文件的快速解压方法,其特征在于:所述多缓冲接口函数包括函数SwitchBuf、GetDecodeBuf和GetShowBuf;其中所述函数SwitchBuf用于根据当前的位图显示方式更新所述位置变量curPictureIndex;所述函数GetDecodeBuf用于根据当前位图显示方式获得下一次解压将使用的缓冲区,函数GetShowBuf用于获得当前显示位图的缓冲区。
6.根据权利要求5所述位图文件的快速解压方法,其特征在于:所述解压方法还包括:设置位图显示回调函数DMPAL_ShowPicture和解压任务回调函数DMPAL_DecodePicture;其中,所述位图显示回调函数DMPAL_ShowPicture用于将保存当前位图的缓冲区的数据拷贝到显示层的缓冲区;解压任务回调函数DMPAL_DecodePicture用于将解压的位图数据写入保存前一幅位图的缓冲区或保存后一幅位图的缓冲区。
7.根据权利要求6所述位图文件的快速解压方法,其特征在于:位图显示回调函数DMPAL_ShowPicture通过调用所述函数GetShowBuf获得当前位图的缓冲区;解压任务回调函数DMPAL_DecodePicture通过调用所述函数GetDecodeBuf获得解压的位图数据写入的缓冲区。
8.根据权利要求1或6所述位图文件的快速解压方法,其特征在于:所述后台解压任务在位图解压完成后,向前台显示任务释放解压完成信号量。
9.根据权利要求1或6所述位图文件的快速解压方法,其特征在于:所述前台显示任务在当前位图显示完成后,切换所述缓冲区,并向后台解压任务释放开始解压信号量。
10.根据权利要求9所述位图文件的快速解压方法,其特征在于:设置一定时器,当前位图显示完成一定时间后由定时器发出开始显示信号量,启动切换所述缓冲区和向后台解压任务释放开始解压信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100336079A CN101635141B (zh) | 2009-06-24 | 2009-06-24 | 一种位图文件的快速解压方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100336079A CN101635141B (zh) | 2009-06-24 | 2009-06-24 | 一种位图文件的快速解压方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101635141A true CN101635141A (zh) | 2010-01-27 |
CN101635141B CN101635141B (zh) | 2011-03-23 |
Family
ID=41594311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100336079A Active CN101635141B (zh) | 2009-06-24 | 2009-06-24 | 一种位图文件的快速解压方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101635141B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102044058A (zh) * | 2010-11-22 | 2011-05-04 | Tcl集团股份有限公司 | 一种在电子设备中处理图片的方法、系统及电子设备 |
CN102332659A (zh) * | 2011-06-23 | 2012-01-25 | 泰兴市航联电连接器有限公司 | 一种防松抗强振自由端电连接器 |
CN102332151A (zh) * | 2011-09-13 | 2012-01-25 | 深圳Tcl新技术有限公司 | 大批量图片的处理方法及系统 |
CN103399802A (zh) * | 2013-07-30 | 2013-11-20 | Tcl集团股份有限公司 | 一种图片预加载方法以及装置 |
CN103686348A (zh) * | 2013-11-27 | 2014-03-26 | 青岛海信电器股份有限公司 | 图像的解码方法和装置 |
CN108681527A (zh) * | 2018-05-14 | 2018-10-19 | 四川斐讯信息技术有限公司 | 一种用于智能穿戴设备的文字显示方法及装置 |
-
2009
- 2009-06-24 CN CN2009100336079A patent/CN101635141B/zh active Active
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102044058A (zh) * | 2010-11-22 | 2011-05-04 | Tcl集团股份有限公司 | 一种在电子设备中处理图片的方法、系统及电子设备 |
CN102044058B (zh) * | 2010-11-22 | 2012-11-21 | Tcl集团股份有限公司 | 一种在电子设备中处理图片的方法、系统及电子设备 |
CN102332659A (zh) * | 2011-06-23 | 2012-01-25 | 泰兴市航联电连接器有限公司 | 一种防松抗强振自由端电连接器 |
CN102332151A (zh) * | 2011-09-13 | 2012-01-25 | 深圳Tcl新技术有限公司 | 大批量图片的处理方法及系统 |
CN102332151B (zh) * | 2011-09-13 | 2015-01-07 | 深圳Tcl新技术有限公司 | 大批量图片的处理方法及系统 |
CN103399802A (zh) * | 2013-07-30 | 2013-11-20 | Tcl集团股份有限公司 | 一种图片预加载方法以及装置 |
CN103686348A (zh) * | 2013-11-27 | 2014-03-26 | 青岛海信电器股份有限公司 | 图像的解码方法和装置 |
CN103686348B (zh) * | 2013-11-27 | 2016-08-24 | 青岛海信电器股份有限公司 | 图像的解码方法和装置 |
CN108681527A (zh) * | 2018-05-14 | 2018-10-19 | 四川斐讯信息技术有限公司 | 一种用于智能穿戴设备的文字显示方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101635141B (zh) | 2011-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101635141B (zh) | 一种位图文件的快速解压方法 | |
US6714202B2 (en) | Method for encoding animation in an image file | |
CN110427094B (zh) | 显示方法、装置、电子设备及计算机可读介质 | |
CN103957416B (zh) | 部分伸展方法以及图像处理装置 | |
TWI428871B (zh) | 顯示裝置的低功率更新方法及設備 | |
CN101460992B (zh) | 混合多个显示层 | |
CN103218224B (zh) | 一种提高存储空间利用率的方法和终端 | |
US9400754B2 (en) | Asynchronous swap mechanism and page eviction from memory | |
CN105430480A (zh) | 一种视频数据存储的方法及系统 | |
CN106982388B (zh) | 一种图片的显示方法和装置 | |
CN1469316A (zh) | 使用压缩域处理显示任意放大的高清晰度图像的方法和装置 | |
US20130148740A1 (en) | Method and apparatus for processing partial video frame data | |
CN110521208B (zh) | 用于片上系统中的智能数据/帧压缩的系统和方法 | |
US20100053442A1 (en) | Video processing apparatus and video processing method | |
CN101431632B (zh) | 一种电视机开机画面显示方法、系统及电视机 | |
CN107492131B (zh) | 用于安卓电视的倒影生成方法、存储介质、设备及系统 | |
CN107469352B (zh) | 游戏前端的资源缓存方法、存储介质 | |
CN106020635A (zh) | 信号源显示方法和系统 | |
CN110555890A (zh) | 一种内存管理方法及系统 | |
JP4030014B2 (ja) | 画像表示装置およびそのプログラム | |
JP2002281505A (ja) | 動画像圧縮装置、同装置のカット検出用データ作成方法およびカット位置データ作成方法ならびにカット検出装置および同装置のカット検出方法 | |
CN113986540B (zh) | 定时回收linux高速缓存的方法和装置 | |
JP2001043115A (ja) | ファイル管理システム及びファイル管理方法 | |
CN104837005A (zh) | 一种2d视频与3d视频转换播放的方法及其装置 | |
US20080049143A1 (en) | On-screen display device with compressed data and display method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 266004 No. 151, Zhuzhou Road, Laoshan District, Shandong, Qingdao Patentee after: Hisense Video Technology Co.,Ltd. Address before: 266004 No. 151, Zhuzhou Road, Laoshan District, Shandong, Qingdao Patentee before: HISENSE ELECTRIC Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |