專利名稱:一種位圖文件的快速解壓方法
技術領域:
本發(fā)明涉及一種文件解壓方法,更具體地,涉及一種基于抽絲、多緩存、多
任務技術的大分辨率位圖文件(bitmap)的快速解壓方法。
背景技術:
目前的電視機以及視頻顯示裝置大多提供圖片顯示功能,但因為絕大多數(shù)電 視機中的電視信號視頻處理芯片采用的嵌入式CPU性能限制( 一般主頻在400MHz 以下),所以無法提供大分辨率的位圖(bitmap)文件顯示功能。而部分可以實現(xiàn) 此功能的,也采用的是單任務、單緩存的圖片解壓方式。
單任務、單緩存的圖片解壓方式就是顯示和解壓都是一個線程實現(xiàn)的,解壓 完成之后,才能進行圖片顯示,解壓和顯示兩項工作之前有先后次序關系,必 須串行,同時因為串行進行,所以只需要采用單緩存即可。但是,當在當前顯 示的圖像與上一幅或者下一幅圖^f象之間進行切換時,以1幅4000*3000分辨率 的位圖文件為例,在CPU主頻為40OMHz的情況下,其解壓時間在20秒左右, 如果采用單緩存、單任務機制,兩幅圖片顯示時間間隔至少為20秒??梢?,這 種解壓方式解壓效率低,解壓時間過長,形成方案實用性不強。
因此,需要一種位圖(bitmap)文件的快速解壓方法,能夠適用于數(shù)字電視 機等視頻顯示系統(tǒng),能夠使數(shù)字電視機提供更具實用性的位圖(bitmap)文件顯 示功能。
發(fā)明內容
為了解決上述技術問題,本發(fā)明提供了一種位圖文件的快速解壓方法,該 方法基于抽絲、多緩存、多任務的圖片解壓技術,能夠快速實現(xiàn)大分辨率位圖 (bitmap )文件的快速解壓。 本發(fā)明的技術方案如下一種位圖文件的快速解壓方法,包括
步驟1,將比屏幕大的位圖等比壓縮到屏幕的大??;
步驟2,設置三個緩沖區(qū),其中所述三個緩沖區(qū)分別用于保存壓縮后的當前 位圖、當前位圖的前一幅位圖以及當前位圖的后一幅位步驟3,同時執(zhí)行前臺顯示任務和后臺解壓任務;其中所述前臺顯示任務將 保存當前位圖的緩沖區(qū)的數(shù)據(jù)拷貝到顯示層的緩沖區(qū),所述后臺解壓任務用于 解壓壓縮后的位圖,并根據(jù)當前位圖的顯示方式將數(shù)據(jù)寫入保存前一幅位圖的 緩沖區(qū)或保存后一幅位圖的緩沖區(qū)。
其中,步驟l采用"抽絲"算法來壓縮位圖。所述"抽絲"算法包括以下步 驟對比位圖和屏幕的寬、高比例,確定要按位圖高度進行壓縮還是要按照位 圖寬度進行壓縮,確定壓縮比例;根據(jù)壓縮比例,計算出壓縮后位圖的高度和 寬度;如果按位圖高度進行壓縮,則根據(jù)壓縮前、后的位圖高度,使被抽取的 行均勻分布,對每一列位圖抽取不用的行;如果按位圖寬度進行壓縮,則根據(jù) 壓縮前、后的位圖寬度,使被抽取的列均勻分布,對每一行位圖抽取不用的列。
其中,如果位圖高度比例大于寬度比例的情況下,要按照位圖高度進行壓縮; 位圖寬度比例大于高度比例的情況下,要按照位圖寬度進行壓縮。
其中,步驟2進一步包括設置位置變量curPicturelndex以及多緩沖接口 函數(shù),其中所述位置變量curPicturelndex指示保存當前位圖的數(shù)據(jù)的緩沖區(qū) 位置;所述多緩沖接口函數(shù)用于根據(jù)當前位圖顯示方式切換緩沖區(qū)。
所述多緩沖接口函數(shù)包括函數(shù)SwitchBuf 、 GetDecodeBuf和GetShowBuf; 其中所述函數(shù)Swi tchBuf用于根據(jù)當前的位圖顯示方式更新位置變量 curPicturelndex;所述函數(shù)GetDecodeBuf用于根據(jù)當前位圖顯示方式獲得下 一次解壓將^f吏用的緩沖區(qū),函數(shù)GetShowBuf用于獲得當前顯示位圖的緩沖區(qū)。
其中,步驟3進一步包括設置位圖顯示回調函數(shù)DMPAL—ShowPicture和 解壓任務回調函數(shù)DMPAL—DecodePicture;其中,所述位圖顯示回調函數(shù) DMPAL—ShowPicture用于將保存當前位圖的緩沖區(qū)的數(shù)據(jù)拷貝到顯示層的緩沖 區(qū);解壓任務回調函數(shù)DMPAL—DecodePicture用于將解壓的位圖數(shù)據(jù)寫入保存前一幅位圖的緩沖區(qū)或保存后一幅位圖的緩沖區(qū)。
其中,位圖顯示回調函l史DMPAL—ShowPicture通過調用所述函數(shù)GetShowBuf 獲得當前位圖的緩沖區(qū);解壓任務回調函^:DMPAL—DecodePicture通過調用所 述函數(shù)GetDecodeBuf獲得解壓的位圖數(shù)據(jù)寫入的緩沖區(qū)。
更進一步地,在步驟3中,所述后臺解壓任務在位圖解壓完成后,向前臺顯 示任務釋放解壓完成信號量;
所述前臺顯示任務在當前位圖顯示完成后,切換所述緩沖區(qū),并向后臺解壓 任務釋放開始解壓信號。具體地,設置一定時器,當前位圖顯示完成一定時間 后由定時器發(fā)出開始顯示信號量,啟動切換所述緩沖區(qū)。
通過本發(fā)明的基于抽絲、多緩存、多任務的圖片解壓方法,能夠實現(xiàn)以快于 圖片解壓速度響應前一幅或下一幅圖片顯示功能,從而使大分辨率位圖文件瀏 覽功能達到實用程度。不僅可實現(xiàn)大分辨率位圖的快速解壓和顯示功能,還可 以采用軟件方式實現(xiàn)大分辨率Bitmap文件快速解壓,從而提供更具竟爭力的數(shù) 字電視Bitmap圖片瀏覽功能。
下面結合附圖和具體實施方式
對本實用新型作進一步詳細的說明。
圖l是本發(fā)明實施例抽絲算法流程框圖。
圖2是本發(fā)明實施例多緩存、多任務技術功能框圖。
具體實施例方式
為了使本技術領域的人員更好地理解本發(fā)明的方案,并使本發(fā)明的上述目 的、特征和優(yōu)點能夠更加明顯易懂,下面結合實施例及實施例附圖對本發(fā)明作 進一步詳細的說明。
本發(fā)明的快速解壓方法是一種基于抽絲、多緩存、多任務的位圖解壓技術, 采用軟件方式實現(xiàn)大分辨率位圖(bitmap)文件的快速解壓功能。
本發(fā)明的快速解壓方法包括以下步驟
步驟l,將比屏幕大的位圖等比壓縮到屏幕的大小。具體包括對比位圖和屏幕的寬、高比例,確定要按高度進行壓縮(高度比例〉寬度比例情況下),還 是要按照寬度進行壓縮(寬度比例〉高度比例情況下),確定壓縮比例。根據(jù)壓 縮比例,計算出壓縮后的高度和寬度。如果按照高度進行壓縮,根據(jù)壓縮前、 后高度,按照抽取行均勻分布原則,利用"抽絲"算法,除去不用的行。反之, 如果按照寬度進行壓縮,則根據(jù)壓縮前、后寬度,按照抽取列均勻分布原則, 利用"抽絲"算法,對每一行抽取不用的列。對保留數(shù)據(jù)進行解壓,獲得圖像 的有效數(shù)據(jù)。
所述抽絲算法可具體參見附圖1。附圖1是本發(fā)明抽絲算法的流程框圖。這
里設定原始圖像高度(寬度)為m,抽絲解壓后的圖像高度(寬度)為n。抽絲 算法基本處理過程如下
S101:獲得原始圖像寬度(高度)oi和圖像抽絲解壓后的寬度(高度)n;
S102:根據(jù)原始圖像高度(寬度),定義一個含m個元素的數(shù)組pointer,
S103:將數(shù)組所有元素的初始值設為1,表示默認情況下,所有行(列)數(shù)
據(jù)均需要進行解壓;
S104:利用公式m-n獲得需要抽掉行數(shù)(列數(shù)),該變量記為lose_num;
S105:利用公式m/( lose—num+l)計算需要隔多少行(列)抽調一行數(shù)據(jù), 該變量記為len—line,考慮到計算時邊緣效應,該變量定義時需定義成 double類型,因為len-line為double類型;
S106:計算len-line+0. 5再取整,得出的整數(shù)就是要舍棄的間隔數(shù),記 為dx。此步驟是為了消除邊緣效應。
S107:這樣則^皮舍棄行(列)就是:pointer [dx], pointer [2*dx], pointer [3*dx],...;將舍棄行(列)對應的數(shù)組pointer元素值變?yōu)?;
SI08:圖像解壓時,根據(jù)元素數(shù)組pointer的元素值進行判斷對應行(列) 是否需要進行解壓,元素值為1的行(列)進行解壓,元素值為0的行(列)跳過。
本步驟的目的是為了有效解決在有限顯示區(qū)域即屏幕范圍內,在圖像不失 真前提下,完整顯示大分辨率圖像,即解決圖像分辨率大于屏幕范圍的問題。
步驟2,設置三個緩沖區(qū),其中所述三個緩沖區(qū)分別用于保存壓縮后的當前
位圖、當前位圖的前一幅位圖以及當前位圖的后一幅位圖。具體包括 設置位圖緩存區(qū)unsigned char *pPictureBuf [3];
設置位置變量int curPicturelndex,用于指示保存當前位圖的數(shù)據(jù)的緩沖 區(qū)位置;
設置多緩存接口函數(shù),包括
(1) 函數(shù)SwitchBuf
函數(shù)SwitchBuf 4艮據(jù)當前位圖顯示方式更新位置變量curPicturelndex,獲 得當前需顯示的位圖位置。函數(shù)SwitchBuf的定義為
void SwitchBuf(int showpictype)
curPicturelndex = (showpictype == pre) (curPicturelndex -l):
(curPicturelndex +1); if (curPicturelndex > 2)
curPicturelndex = 0; if (curPicturelndex < 0)
curPicturelndex = 2;
其中curPicturelndex為上面所述的位置變量;showpictype表示當前位圖 顯示方式。
(2) 函數(shù)GetDecodeBuf 函數(shù)GetDecodeBuf定義為Unsigned char * GetDecodeBuf (int showpictype) (
int temp = (showpictype== pre) (curPicturelndex -1)
(curPicturelndex +1); if (temp > 2) temp = 0;
if (temp < 0) temp = 2;
return pPictureBuf [temp];
其中pPictureBuf為上面所述的緩沖區(qū),curPicturelndex為上面所述的 位置變量;showpictype表示當前位圖顯示方式;temp為函數(shù)內的臨時變量。 函數(shù)GetDecodeBuf根據(jù)當前位圖顯示方式獲得下一次解壓將使用的緩沖區(qū)。
(3)函凄史GetShowBuf 函數(shù)GetShowBuf定義如下
Unsigned char *GetShowBuf0
return pPictureBuf [curPicturelndex];
其中pPictureBuf為上面所述的緩沖區(qū),curPicturelndex為上面所述的 位置變量。
函數(shù)GetShowBuf用于獲得當前顯示位圖的緩沖區(qū)。在執(zhí)行過程中,通過調用以上多緩沖接口函數(shù),根據(jù)當前位圖顯示方式, 在三個緩沖區(qū)之間切換保存當前顯示位圖數(shù)據(jù)的緩沖區(qū),以及保存下一次解壓 的位圖數(shù)據(jù)所使用的緩沖區(qū)。
步驟3,同時執(zhí)行前臺顯示任務和后臺解壓任務;其中所述前臺顯示任務將 保存當前位圖的緩沖區(qū)的數(shù)據(jù)拷貝到顯示層的緩沖區(qū),所述后臺解壓任務用于 解壓壓縮后的位圖,并根據(jù)當前位圖的顯示方式將數(shù)據(jù)寫入保存前一幅位圖的
緩沖區(qū)或保存后一幅位圖的緩沖區(qū)。
在步驟3中,i殳置顯示任務回調函數(shù)為DMPAL—ShowPicture以及解壓任務 回調函數(shù)酵AUecodePicture。其中
顯示任務回調函數(shù)DMPAL—ShowPicture涉及與顯示層凄t據(jù)交互機制,將保 存當前顯示位圖的緩沖區(qū)中的數(shù)據(jù)通過內存拷貝方式(memcpy)拷貝到代表顯 示層的緩沖區(qū)。
解壓任務回調函數(shù)DMPAL-DecodePicture用于將解壓的位圖數(shù)據(jù)寫入保存 前一幅位圖的緩沖區(qū)或保存后一幅位圖的緩沖區(qū),其具體定義如下
int DMPAL-DecodePicture (unsigned char *pPictureBuf, char *f ilename)
〃以只讀方式打開文件
〃讀取位圖文件頭部信息,獲得圖像寬度w、高度h、顏色深度信息 〃根據(jù)圖像顏色深度和寬度信息計算獲得一行數(shù)據(jù)需要內存空間 //申請一行數(shù)據(jù)空間for (i = 0 ; i < h; i ++)
if (當前行被抽絲)
break; 〃讀取一行數(shù)據(jù) for (j = 0; j < w; j++) (
if (當前列被抽絲) break;
〃當前4亍凄t據(jù)中的當前列元素寫入pPictureBuf
//釋放申請空間 〃關閉文件
其中,pPictureBuf為上面所述的緩沖區(qū),filename為需解壓的位圖文件 的文件名。
步驟3中前臺顯示任務和后臺解壓任務的具體執(zhí)行過程如附圖2所示,包 括以下步驟
S201:創(chuàng)建前臺顯示任務,并釋放開始顯示信號量; S202:創(chuàng)建后臺解壓任務,并釋放開始解壓信號量; S203:前臺顯示任務等待解壓完成信號量; S204:后臺解壓任務等待開始解壓信號量;S205后臺解壓任務在收到開始解壓信號量后,開始位圖解壓過程;
S206后臺解壓任務在位圖解壓完成后,釋放解壓完成信號量;
S207前臺顯示任務在收到解壓完成信號量之后,等待開始顯示信號量;
S208接收到開始顯示信號量后,調用上述多緩沖接口函數(shù),切換緩沖區(qū);
S209釋放所述開始解壓信號量,4吏后臺解壓程序開始下一幅圖片的解壓;
S210執(zhí)行當前顯示位圖的顯示;
S211顯示完畢,啟動定時器;
S212定時器時間到后,釋放開始顯示信號量,從而開始下一幅位圖的顯
在以上任務的執(zhí)行過程中,可通過退出按鍵結束任務。 本發(fā)明主要實現(xiàn)以快于圖片解壓速度響應前一幅或下一幅圖片顯示功能。 利用上述三個緩沖區(qū),通過同時執(zhí)行前臺顯示任務和后臺解壓任務,可以實現(xiàn)
兩幅圖片顯示時間間隔小于10S,從而使大分辨率位圖文件瀏覽功能達到實用程度。
以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于 此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到 變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應 該以權利要求所界定的保護范圍為準。
權利要求
1.一種位圖文件的快速解壓方法,其特征在于,包括將位圖等比壓縮到屏幕的大??;設置三個緩沖區(qū),其中所述三個緩沖區(qū)分別用于保存壓縮后的當前位圖、當前位圖的前一幅位圖以及當前位圖的后一幅位圖;同時執(zhí)行前臺顯示任務和后臺解壓任務;其中所述前臺顯示任務將保存當前位圖的緩沖區(qū)的數(shù)據(jù)拷貝到顯示層的緩沖區(qū),所述后臺解壓任務用于解壓壓縮后的位圖,并根據(jù)當前位圖的顯示方式將數(shù)據(jù)寫入保存前一幅位圖的緩沖區(qū)或保存后一幅位圖的緩沖區(qū)。
2. 根據(jù)權利要求1所述位圖文件的快速解壓方法,其特征在于所述等比 壓縮采用"抽絲,,算法,所述"抽絲,,算法包括以下步驟對比位圖和屏幕的 寬、高比例,確定要按位圖高度進行壓縮還是要按照位圖寬度進行壓縮,確定 壓縮比例;根據(jù)壓縮比例,計算出壓縮后位圖的高度和寬度;如果按位圖高度 進行壓縮,則根據(jù)壓縮前、后的位圖高度,使被抽取的行均勻分布,對每一列 位圖抽取不用的行;如果按位圖寬度進行壓縮,則根據(jù)壓縮前、后的位圖寬度, 使被抽取的列均勻分布,對每一4亍位圖抽取不用的列。
3. 根據(jù)權利要求2所述位圖文件的快速解壓方法,其特征在于如果位圖 高度比例大于寬度比例的情況下,按照位圖高度進行壓縮;位圖寬度比例大于 高度比例的情況下,按照位圖寬度進行壓縮。
4. 根據(jù)權利要求l所述位圖文件的快速解壓方法,其特征在于所迷解壓 方法還包括設置位置變量curPicturelndex以及多緩沖接口函數(shù),其中所述位置變量 curPicturelndex指示保存當前位圖的數(shù)據(jù)的緩沖區(qū)位置;所述多緩沖接口函數(shù) 用于根據(jù)當前位圖顯示方式切換緩沖區(qū)。
5. 根據(jù)權利要求4所述位圖文件的快速解壓方法,其特征在于所述多緩 沖接口函數(shù)包括函數(shù)SwitchBuf、 GetDecodeBuf和GetShowBuf;其中所述函數(shù) SwitchBuf用于才艮據(jù)當前的位圖顯示方式更新所述位置變量curPicturelndex;所述函數(shù)GetDecodeBuf用于根據(jù)當前位圖顯示方式獲得下一次解壓將使用的緩 沖區(qū),函數(shù)GetShowBuf用于獲得當前顯示位圖的緩沖區(qū)。
6. 根據(jù)權利要求5所述位圖文件的快速解壓方法,其特征在于所述解 壓方法還包括設置位圖顯示回調函數(shù)DMPAL-ShowPicture和解壓任務回調 函數(shù)DMPAL—DecodePicture ;其中,所述位圖顯示回調函凝 DMPAL-ShowPicture用于將保存當前位圖的緩沖區(qū)的數(shù)據(jù)拷貝到顯示層的緩 沖區(qū);解壓任務回調函itDMPAL-DecodePicture用于將解壓的位圖lt據(jù)寫入 保存前一幅位圖的緩沖區(qū)或保存后一幅位圖的緩沖區(qū)。
7. 根據(jù)權利要求6所述位圖文件的快速解壓方法,其特征在于位圖顯的緩沖區(qū);解壓任務回調函數(shù)DMPAL—DecodePicture通過調用所述函數(shù) GetDecodeBuf獲得解壓的位圖數(shù)據(jù)寫入的緩沖區(qū)。
8. 根據(jù)權利要求1或6所述位圖文件的快速解壓方法,其特征在于所 述后臺解壓任務在位圖解壓完成后,向前臺顯示任務釋放解壓完成信號量。
9. 根據(jù)權利要求1或6所述位圖文件的快速解壓方法,其特征在于所 述前臺顯示任務在當前位圖顯示完成后,切換所述緩沖區(qū),并向后臺解壓任 務釋放開始解壓信號量。
10. 根據(jù)權利要求9所述位圖文件的快速解壓方法,其特征在于設置一 定時器,當前位圖顯示完成一定時間后由定時器發(fā)出開始顯示信號量,啟動 切換所述緩沖區(qū)和向后臺解壓任務釋^L開始解壓信號。
全文摘要
本發(fā)明涉及一種位圖文件的快速解壓方法,包括步驟1,將比屏幕大的位圖等比壓縮到屏幕的大??;步驟2,設置三個緩沖區(qū),分別用于保存壓縮后的當前位圖、當前位圖的前一幅位圖以及當前位圖的后一幅位圖;步驟3,同時執(zhí)行前臺顯示任務和后臺解壓任務。本發(fā)明的快速解壓方法基于抽絲、多緩存、多任務的圖片解壓技術,能夠實現(xiàn)以快于圖片解壓速度響應前一幅或下一幅圖片顯示功能,從而使大分辨率位圖文件瀏覽功能達到實用程度。
文檔編號G09G5/373GK101635141SQ20091003360
公開日2010年1月27日 申請日期2009年6月24日 優(yōu)先權日2009年6月24日
發(fā)明者慕安臻 申請人:青島海信電器股份有限公司