專利名稱:圖形文件的無(wú)損壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種圖形文件的無(wú)損壓縮方法,尤其是一種在臺(tái)式機(jī)PC上執(zhí)行壓縮過(guò)程,由手機(jī),PDA等嵌入式個(gè)人終端設(shè)備下載,解壓縮的無(wú)損圖形文件壓縮方法;屬于計(jì)算機(jī)圖形處理技術(shù)領(lǐng)域。
背景技術(shù):
近幾年來(lái),隨著人們對(duì)資訊的需求越來(lái)越多,各種手機(jī),PDA,電子詞典,掌上電腦,汽車導(dǎo)航系統(tǒng)等嵌入式個(gè)人終端設(shè)備蓬勃興起。相對(duì)電腦臺(tái)式機(jī)而言,這些設(shè)備體積小,CPU速度慢,內(nèi)存容量小,存儲(chǔ)空間有限,資源較少。但是人們對(duì)嵌入式個(gè)人終端設(shè)備的要求卻越來(lái)越高,比如目前市場(chǎng)上已經(jīng)開(kāi)始流行彩屏手機(jī),而且有些彩屏手機(jī)已經(jīng)達(dá)到64K色,擁有完美的表現(xiàn)手段。但是目前的嵌入式個(gè)人終端設(shè)備一般都存儲(chǔ)空間較少,可能存儲(chǔ)圖形文件的空間非常有限;并且處理能力較低,無(wú)法負(fù)擔(dān)運(yùn)算量太大的解壓縮工作。
對(duì)于圖形文件的數(shù)據(jù)格式,一般而言,完整的圖形文件一般由數(shù)據(jù)頭信息和像素點(diǎn)陣這兩部分組成。數(shù)據(jù)頭信息主要記錄圖形的寬度width,高度height,每點(diǎn)占比特?cái)?shù)bpp(bits per pixel,以下用bpp代替)等關(guān)于本圖的信息,數(shù)據(jù)頭信息一般在整個(gè)圖形數(shù)據(jù)中占很小的比例。像素點(diǎn)陣指圖形中由每個(gè)像素點(diǎn)的顏色值按照行列排成的矩陣序列。像素點(diǎn)陣是整個(gè)圖形的主要組成部分,占據(jù)絕大部分的存儲(chǔ)空間。
現(xiàn)有技術(shù)中,圖形的壓縮方法存在壓縮率不高,解壓縮耗費(fèi)大量系統(tǒng)資源以及壓縮失真的問(wèn)題。以最流行的圖形壓縮方法為JPEG壓縮法為例,JPEG壓縮分四個(gè)步驟實(shí)現(xiàn)1.顏色模式轉(zhuǎn)換及采樣;2.DCT變換;3.量化;4.編碼。第一步驟顏色模式轉(zhuǎn)換及采樣想要用JPEG基本壓縮法處理全彩色圖像,得先把RGB顏色模式圖像數(shù)據(jù)轉(zhuǎn)換為YCbCr顏色模式的數(shù)據(jù),Y代表亮度,Cb和Cr則代表色度、飽和度。通過(guò)下列計(jì)算公式可完成數(shù)據(jù)轉(zhuǎn)換。
Y=0.2990R+0.5870G+0.1140BCb=-0.1687R-0.3313G+0.5000B+128Cr=0.5000R-0.4187G-0.0813B+128這個(gè)浮點(diǎn)運(yùn)算是相當(dāng)耗費(fèi)資源的,其后幾個(gè)步驟的DCT變換是一個(gè)更加復(fù)雜的浮點(diǎn)運(yùn)算,量化和編碼也需要大量的運(yùn)算,這對(duì)于嵌入式系統(tǒng)有限的CPU資源是無(wú)法負(fù)擔(dān)的,而且JPEG還是一種有損壓縮方法。
通常為了快速解壓縮還原圖形,采用的壓縮算法是LZW(Lempel-Ziv-Welch)或者LZSS(由Storer和Szymanski改進(jìn)的LZW稱為L(zhǎng)ZSS算法)等類似根據(jù)指針字典的LZ系列壓縮算法。LZ系列壓縮算法是針對(duì)文本壓縮設(shè)計(jì)的,如果將其應(yīng)用于圖形壓縮,壓縮的比例較低,節(jié)約空間有限,壓縮效果不明顯。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提出了一種無(wú)損的圖形壓縮方法,能夠在不降低嵌入式系統(tǒng)設(shè)備性能的前提下快速解壓縮,并且壓縮比例高,可以提高系統(tǒng)的容量,使得嵌入式系統(tǒng)設(shè)備能夠存儲(chǔ)更多的圖形文件。
本發(fā)明的技術(shù)方案如下所述一種圖形文件的無(wú)損壓縮方法,其特征在于包括以下步驟步驟一、采用預(yù)先選定的多個(gè)不同的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)對(duì)圖形文件像素點(diǎn)陣進(jìn)行預(yù)壓縮,選取壓縮結(jié)果所占存儲(chǔ)空間最小的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù);步驟二、按選定的壓縮結(jié)果最小的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),對(duì)圖形文件進(jìn)行壓縮;步驟三、將壓縮文件頭信息和步驟二壓縮后數(shù)據(jù)寫入文件,生成壓縮文件。
如果圖形本身比較簡(jiǎn)單,會(huì)出現(xiàn)大量連續(xù)相同顏色值的像素點(diǎn)的情況,使用多位bit的大壓縮計(jì)數(shù)器長(zhǎng)度值,即bpc值,來(lái)存儲(chǔ)相同顏色值的連續(xù)點(diǎn)計(jì)數(shù),比較合適,因?yàn)槿绻?jì)數(shù)器占空間太小,它本身的容量也就越小,結(jié)果導(dǎo)致在沒(méi)有顏色轉(zhuǎn)換的情況下由于計(jì)數(shù)器溢出而不得不把一個(gè)單元分割成多個(gè)單元空間來(lái)存儲(chǔ)。但是針對(duì)有些復(fù)雜圖形,其顏色變化比較多,顏色也相對(duì)較為復(fù)雜的情況時(shí),不會(huì)出現(xiàn)大量的顏色值相同的連續(xù)的點(diǎn)的情況下,這種圖形的連續(xù)相同顏色點(diǎn)的數(shù)目通常都比較小,使用大的存儲(chǔ)空間進(jìn)行計(jì)數(shù)就有些浪費(fèi)空間,不大合適了。在這種情況下,就應(yīng)該考慮使用較小的bpc值,甚至對(duì)于有些特別復(fù)雜的圖形應(yīng)該采用3-7bits的bpc值進(jìn)行計(jì)數(shù)以達(dá)到增加壓縮率的目的。因此,在實(shí)際應(yīng)用中,應(yīng)針對(duì)不同的圖形應(yīng)該選擇不同容量的壓縮計(jì)數(shù)器長(zhǎng)度bpc值。
如上所述的圖形文件的無(wú)損壓縮方法,所述的預(yù)壓縮包括如下步驟步驟1.1預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)的初值,采用記錄顏色值和相同顏色值連續(xù)點(diǎn)個(gè)數(shù)的壓縮方法,壓縮圖形文件點(diǎn)陣;步驟1.2保存壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間的大小和壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)初值。
所述的步驟1.1中壓縮圖形文件點(diǎn)陣的過(guò)程如下步驟A1、建立一個(gè)記錄單元,按圖形文件的bpp設(shè)定的顏色值存儲(chǔ)空間存儲(chǔ)像素點(diǎn)的顏色值,按壓縮計(jì)數(shù)器長(zhǎng)度初值設(shè)定存儲(chǔ)空間來(lái)存儲(chǔ)相同顏色值連續(xù)點(diǎn)個(gè)數(shù);步驟A2、取圖形文件點(diǎn)陣最左上點(diǎn)作為當(dāng)前點(diǎn),在記錄單元中記錄當(dāng)前點(diǎn)的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A3、判斷當(dāng)前點(diǎn)右方的像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同,如果到達(dá)行的末尾,判斷當(dāng)前點(diǎn)下一行最左像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同;如果相同執(zhí)行步驟A4,如果不相同執(zhí)行步驟A5;步驟A4、相同顏色值連續(xù)點(diǎn)個(gè)數(shù)加一;如果相同顏色值連續(xù)點(diǎn)個(gè)數(shù)再加一,會(huì)超出了壓縮計(jì)數(shù)器長(zhǎng)度值設(shè)定存儲(chǔ)空間,則建立一個(gè)新的記錄單元,在記錄單元中記錄顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A5、建立一個(gè)新的記錄單元,在記錄單元中記錄新的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A6、將當(dāng)前點(diǎn)移動(dòng)到右方的像素點(diǎn),如果到達(dá)行的末尾,當(dāng)前點(diǎn)移動(dòng)到下一行最左像素點(diǎn),執(zhí)行步驟A3;如果達(dá)到最右下點(diǎn),則結(jié)束整個(gè)壓縮過(guò)程。
由于圖形文件的點(diǎn)陣中,點(diǎn)的色彩是漸進(jìn)變化的,相鄰的點(diǎn)的色彩往往是相同的。通過(guò)以上的統(tǒng)計(jì)壓縮法正是考慮了每一行中相鄰列的點(diǎn)的顏色接近的規(guī)律而設(shè)計(jì)的。
解壓縮時(shí),非常簡(jiǎn)單,只需按照顏色值及其相同點(diǎn)個(gè)數(shù),復(fù)制這個(gè)數(shù)目的同樣顏色的點(diǎn),效率是相當(dāng)高的,其消耗只相當(dāng)于內(nèi)存賦值,對(duì)效率的影響幾乎可以忽略不計(jì)。
如上所述的圖形文件的無(wú)損壓縮方法,所述步驟1.1中的記錄顏色值和相同顏色值連續(xù)點(diǎn)個(gè)數(shù)的方法,在如上所述壓縮方法之前,還包括如下步驟步驟B1預(yù)先設(shè)定任意兩種不同顏色異或運(yùn)算后的顏色值,相同顏色異或運(yùn)算后的顏色值為零;
步驟B2把圖形點(diǎn)陣每一行與它的上一行進(jìn)行異或運(yùn)算作為本行的結(jié)果,第一行數(shù)據(jù)不做任何處理,得到一個(gè)新的像素點(diǎn)陣;以上的帶行對(duì)比的統(tǒng)計(jì)壓縮法先考慮了每一列中相鄰行的點(diǎn)的顏色接近的規(guī)律而且考慮了異或后得到的點(diǎn)陣中每一行中相鄰列的點(diǎn)的顏色接近的規(guī)律,大大提高了壓縮比率。
解壓縮要分兩個(gè)步驟進(jìn)行,第一步跟統(tǒng)計(jì)壓縮法相同,先有統(tǒng)計(jì)值還原成異或運(yùn)算后的點(diǎn)陣,這個(gè)過(guò)程的效率與統(tǒng)計(jì)壓縮法完全相同,已經(jīng)討論過(guò),效率是很高的;第二步由上一行的內(nèi)容和本行內(nèi)容異或得到本行真正的內(nèi)容(其中第一行無(wú)需處理),解壓即可完成,分析第二步的效率,第二步動(dòng)作其實(shí)只有一個(gè)操作,那就是把兩行數(shù)據(jù)進(jìn)行異或,異或操作是CPU的一個(gè)基本邏輯運(yùn)算,速度非??欤哉麄€(gè)解壓縮的效率同樣是相當(dāng)高的。
如上所述的圖形文件的無(wú)損壓縮方法,所述的步驟1.1中壓縮圖形文件點(diǎn)陣的過(guò)程如下步驟D1預(yù)先設(shè)定任意兩種不同顏色異或運(yùn)算后的顏色值,相同顏色異或運(yùn)算后的顏色值為零;步驟D2把圖形點(diǎn)陣每一行與它的上一行進(jìn)行異或運(yùn)算作為本行的結(jié)果,第一行數(shù)據(jù)不做任何處理,得到一個(gè)新的像素點(diǎn)陣;執(zhí)行步驟C1;步驟C1、建立一個(gè)記錄單元,先按壓縮計(jì)數(shù)器長(zhǎng)度初值設(shè)定存儲(chǔ)空間來(lái)存儲(chǔ)相同顏色值連續(xù)點(diǎn)個(gè)數(shù),再按圖形文件的bpp設(shè)定的顏色值存儲(chǔ)空間存儲(chǔ)像素點(diǎn)的顏色值;步驟C2、取圖形文件點(diǎn)陣最左上點(diǎn)作為當(dāng)前點(diǎn),在記錄單元中記錄當(dāng)前點(diǎn)的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C3、判斷當(dāng)前點(diǎn)右方的像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同,如果到達(dá)行的末尾,判斷當(dāng)前點(diǎn)下一行最左像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同;如果相同執(zhí)行步驟C4,否則執(zhí)行步驟C5;步驟C4、相同顏色值連續(xù)點(diǎn)個(gè)數(shù)加一;如果相同顏色值連續(xù)點(diǎn)個(gè)數(shù)再加一,會(huì)超出了壓縮計(jì)數(shù)器長(zhǎng)度值設(shè)定存儲(chǔ)空間,則建立一個(gè)新的記錄單元,在記錄單元中記錄顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C5、判斷當(dāng)前點(diǎn)的顏色是否為零,如果為零執(zhí)行步驟C6;否則執(zhí)行步驟C7;步驟C6、改變記錄單元,不記錄顏色值,把為零顏色值的連續(xù)顏色相同像素?cái)?shù)目記為數(shù)目的相反數(shù),即記錄單元只含有一個(gè)負(fù)數(shù),負(fù)數(shù)的絕對(duì)值為連續(xù)顏色為零像素?cái)?shù)目;然后執(zhí)行步驟C7;步驟C7、建立一個(gè)新的記錄單元,在記錄單元中記錄新的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C8、將當(dāng)前點(diǎn)移動(dòng)到右方的像素點(diǎn),如果到達(dá)行的末尾,當(dāng)前點(diǎn)移動(dòng)到下一行最左像素點(diǎn),執(zhí)行步驟C3;如果達(dá)到最右下點(diǎn),則結(jié)束整個(gè)壓縮過(guò)程。
由于上下行中對(duì)應(yīng)列的顏色相同的點(diǎn)進(jìn)行異或運(yùn)算后的值一定是零,而上下行中對(duì)應(yīng)列顏色值相同的點(diǎn)出現(xiàn)的幾率相當(dāng)大(這也是本發(fā)明進(jìn)行行對(duì)比的主要原因),所以對(duì)比后的圖形新點(diǎn)陣中,顏色值為零的點(diǎn)會(huì)特別多,從而最終的統(tǒng)計(jì)結(jié)果中顏色值為零的單元會(huì)比較多。
通過(guò)以上的無(wú)零統(tǒng)計(jì)法,對(duì)顏色值為零的點(diǎn)進(jìn)行精簡(jiǎn),即不記錄顏色值,使壓縮比率進(jìn)一步提高。采用無(wú)零統(tǒng)計(jì)法時(shí)需要對(duì)記錄單元做些調(diào)整,即先記錄連續(xù)顏色相同的像素?cái)?shù)目,然后再記錄顏色值,因?yàn)闊o(wú)零統(tǒng)計(jì)法中每個(gè)單元的長(zhǎng)度是不確定的,在解壓時(shí)需要根據(jù)連續(xù)顏色相同的象素?cái)?shù)目是正數(shù)還是負(fù)數(shù)判斷這個(gè)單元是否為零顏色值單元。調(diào)整記錄顏色值和連續(xù)顏色相同的像素?cái)?shù)目的記錄順序這一步也可以在帶行對(duì)比的統(tǒng)計(jì)壓縮法后進(jìn)行,但是這樣多進(jìn)行了一步,效率比較低。
如上所述的圖形文件的無(wú)損壓縮方法,所述的步驟三具體為首先,將壓縮文件頭信息寫入文件,然后,將圖形文件點(diǎn)陣的壓縮后全部數(shù)據(jù),按生成的順序?qū)懭氲轿募?,得到壓縮后的文件。
如上所述的圖形文件的無(wú)損壓縮方法,所述的步驟三中壓縮文件的頭信息包括壓縮后圖形所占存儲(chǔ)空間的大小、壓縮圖形寬度、壓縮圖形高度和壓縮圖形的bbp和壓縮計(jì)數(shù)器長(zhǎng)度值。
由上面的描述可以看出為了達(dá)到最優(yōu)的壓縮率,本發(fā)明采用不同的bpc值進(jìn)行了多次預(yù)壓縮,最后才選定最優(yōu)bpc值進(jìn)行壓縮。整個(gè)壓縮過(guò)程稍慢,但是由于整個(gè)壓縮是在臺(tái)式機(jī)PC上進(jìn)行,而臺(tái)式機(jī)PC的運(yùn)行速度非???,而且這只是個(gè)開(kāi)發(fā)過(guò)程,不會(huì)對(duì)用戶造成影響,而在嵌入式系統(tǒng)中節(jié)省存儲(chǔ)空間和有較快的相應(yīng)速度。
本發(fā)明首先采用預(yù)先選定的多個(gè)不同壓縮計(jì)數(shù)器長(zhǎng)度進(jìn)行多次預(yù)壓縮,然后確定最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度,完成對(duì)圖形文件的壓縮,再由嵌入式設(shè)備下載后使用,是一種高效的適用于嵌入式設(shè)備的圖形壓縮方法。這種方法適用于從單色到真彩的所有圖形文件的壓縮,大大減少了嵌入式設(shè)備存儲(chǔ)圖形文件占用的存儲(chǔ)空間,從而降低存儲(chǔ)成本;并且由于本方法對(duì)解壓縮的高效,不占用過(guò)多的系統(tǒng)資源,在嵌入式設(shè)備中顯示采用本方法壓縮后圖形,對(duì)速度幾乎沒(méi)有影響,而且圖形沒(méi)有失真。
圖1是本發(fā)明實(shí)施例1對(duì)圖形文件壓縮的流程圖;圖2是本發(fā)明的實(shí)施例1中未進(jìn)行壓縮的原始像素點(diǎn)陣圖形;圖3是本發(fā)明的實(shí)施例1中原始像素點(diǎn)陣圖形進(jìn)行異或運(yùn)算后得到的新點(diǎn)陣的圖形;圖4是本發(fā)明實(shí)施例1的無(wú)零統(tǒng)計(jì)法進(jìn)行壓縮的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行說(shuō)明。
實(shí)施例1本發(fā)明實(shí)施例的圖形文件無(wú)損壓縮方法,如圖1所示,包括以下步驟步驟一、采用壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)取值范圍從3-16bit,對(duì)圖形文件進(jìn)行預(yù)壓縮,選取壓縮結(jié)果最小的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù);對(duì)于大多數(shù)的圖形文件,3-16bit都可以選取出最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),只有當(dāng)處理一些超大或極復(fù)雜的圖形時(shí),才考慮選用其他的參數(shù)。
首先,選定壓縮后文件長(zhǎng)度len=壓縮前文件長(zhǎng)度,最優(yōu)計(jì)數(shù)器pn=0,然后從壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)n=3bit開(kāi)始,進(jìn)行預(yù)壓縮;每進(jìn)行一次預(yù)壓縮將壓縮結(jié)果flen與壓縮后文件長(zhǎng)度len比較,如果flen<len,則令len=flen,pn=n,否則,保持len和pn不變;依次循環(huán)至n=16bit,此時(shí)得到的pn就是最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)。
步驟二、按選定最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),對(duì)圖形文件進(jìn)行壓縮;步驟三、將圖片信息、壓縮信息等壓縮文件頭信息和步驟二壓縮后數(shù)據(jù)寫入文件,生成壓縮文件。
本實(shí)施例所述的預(yù)壓縮包括如下步驟步驟1.1預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)的初值,采用記錄顏色值和相同顏色值連續(xù)點(diǎn)個(gè)數(shù)的壓縮方法,壓縮圖形文件像素點(diǎn)陣;步驟1.2保存壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間的大小和壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)初值。
對(duì)圖形文件的像素點(diǎn)陣進(jìn)行壓縮方法有許多,下面通過(guò)一個(gè)具體的實(shí)例來(lái)比較各種不同的壓縮方法的壓縮比例,來(lái)選取一個(gè)最優(yōu)的預(yù)壓縮方法。
如圖2所示,是一個(gè)待壓縮的圖形文件像素點(diǎn)陣,是一幅50(寬)×12(高)的24bpp數(shù)字“1”的圖形,其中*,&分別代表兩種顏色,那么這幅圖的點(diǎn)陣占據(jù)的存儲(chǔ)空間為50×12×3=1800(Byte)-長(zhǎng)×寬×每個(gè)點(diǎn)占據(jù)字節(jié)數(shù)。
預(yù)先設(shè)定壓縮計(jì)數(shù)器bpc值的初值為16bit;預(yù)先設(shè)定壓縮結(jié)果的大小為原圖片文件未經(jīng)壓縮的大小,即1800Byte。
直接采用統(tǒng)計(jì)壓縮法結(jié)果為*,21,&,7,*,42,&,8,*,40,&,10,*,……,其中兩種顏色交替了25次,所以共有25個(gè)單元(顏色值+相同點(diǎn)個(gè)數(shù)),所以壓縮后這幅圖占據(jù)的存儲(chǔ)空間為25×(3+2)=125(byte)-單元數(shù)目×每單元占據(jù)字節(jié)數(shù),從1800壓縮到125,看來(lái)這種方法的壓縮效果是比較明顯的。再看一下解壓縮的情況,解壓是非常簡(jiǎn)單,只需按照顏色值及其相同點(diǎn)個(gè)數(shù),復(fù)制這個(gè)數(shù)目的同樣顏色的點(diǎn),效率是相當(dāng)高的,其消耗只相當(dāng)于內(nèi)存賦值,對(duì)效率的影響幾乎可以忽略不計(jì)。
如果采用帶行對(duì)比的統(tǒng)計(jì)壓縮法,定義顏色間的異或運(yùn)算,由于在圖2中,只出現(xiàn)了*,&兩種顏色,假設(shè)顏色*和顏色&異或后的顏色值為#,而*異或*和&異或&后的結(jié)果都是0。
首先,對(duì)待壓縮的圖形點(diǎn)陣進(jìn)行異或運(yùn)算,即圖形的每一行和它的上一行的數(shù)據(jù)進(jìn)行異或運(yùn)算后,形成新的行信息,而第一行數(shù)據(jù)不作處理。這樣就得到了一個(gè)新的異或運(yùn)算后的點(diǎn)陣,如圖3所示。
然后,對(duì)得到的異或運(yùn)算后的點(diǎn)陣,按統(tǒng)計(jì)壓縮法對(duì)它進(jìn)行壓縮。即從左上到右下依次記錄點(diǎn)陣的顏色值和顏色值相同的連續(xù)點(diǎn)的個(gè)數(shù),其結(jié)果為*,21,&,7,*,22,0,21,#,1,0,46,#,3,0,46,#,10,0,49,#,4,0,298,#,2,0,8,#,2,0,70由于圖2中兩種顏色交替了16次,所以共有16個(gè)單元(顏色值+相同點(diǎn)個(gè)數(shù)),所以壓縮后這幅圖占據(jù)的存儲(chǔ)空間為16×(3+2)=80(byte)-單元數(shù)目×每單元占據(jù)字節(jié)數(shù),采用以上的壓縮方法,壓縮比率為(1800-80)÷1800=95.6%。由此可見(jiàn),帶行對(duì)比的統(tǒng)計(jì)壓縮法有著很高壓縮率。
如果采用無(wú)零統(tǒng)計(jì)法,把單元內(nèi)顏色和數(shù)目的順序調(diào)換,即先填寫數(shù)目,再填寫顏色;如果顏色為0,那么把連續(xù)相同顏色數(shù)目記為他的相反數(shù),即一個(gè)負(fù)值。而且此單元不再有顏色值,只有數(shù)目,對(duì)于其他顏色值的單元還保持不變,這樣形成一個(gè)新的統(tǒng)計(jì)結(jié)果(21,*),(7,&),(22,*),(-21),(1,#),(-46),(3,#),(-46),(1,#),(-49),(4,#)(-298),(2,#),(-8),(2,#),(-70)新結(jié)果所占用的存儲(chǔ)空間為顏色值不為0單元所占空間+顏色值為0單元所占空間9×(3+2)+7×2=59(byte)改變統(tǒng)計(jì)方法后壓縮率又提高了(80-59)÷80=26.25%。
通過(guò)上面的過(guò)程,可以看出,無(wú)零統(tǒng)計(jì)法為最優(yōu)的預(yù)壓縮方法,保存上面壓縮步驟的壓縮結(jié)果,即圖形文件點(diǎn)陣壓縮后的全部記錄所占據(jù)的存儲(chǔ)空間59byte和上面壓縮采用的壓縮計(jì)數(shù)器長(zhǎng)度bpc=16bit,就結(jié)束了預(yù)壓縮過(guò)程。
如圖4所示,是在計(jì)算機(jī)中,直接采用無(wú)零壓縮法對(duì)圖形文件進(jìn)行預(yù)壓縮的步驟步驟1、定義顏色間的異或運(yùn)算,對(duì)需壓縮圖形進(jìn)行按行異或處理;步驟2、設(shè)定壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)為N,此圖形共有點(diǎn)個(gè)數(shù)為Num,讀取第0個(gè)點(diǎn)顏色值color,當(dāng)前連續(xù)相同點(diǎn)count=1,當(dāng)前處理點(diǎn)位置為pos=1由于計(jì)算機(jī)中,圖形點(diǎn)陣是按從左上到右下的順序進(jìn)行存儲(chǔ)的,所以對(duì)存儲(chǔ)在計(jì)算機(jī)中的圖形文件點(diǎn)陣實(shí)際壓縮操作中,可以不考慮換行,從第0點(diǎn)執(zhí)行到最后一點(diǎn)第Num點(diǎn),就可以完成對(duì)整個(gè)圖形文件的壓縮;
步驟3、判斷pos是否小于Num,如果是執(zhí)行步驟4,否則執(zhí)行步驟5;步驟4、讀取pos位置點(diǎn)的顏色值pclr;然后判斷是否color=pclr并且count<Num;如果是執(zhí)行步驟6,否則執(zhí)行步驟7;步驟5、執(zhí)行步驟7;步驟6、pos加1,count加1;執(zhí)行步驟3;步驟7、判斷color是否等于0;如果是執(zhí)行步驟8,否則執(zhí)行步驟9;步驟8、不記錄顏色值,把為零顏色值的連續(xù)顏色相同像素?cái)?shù)目記為數(shù)目的相反數(shù),即只記錄-count;執(zhí)行步驟10;步驟9、先記錄count,再記錄color;執(zhí)行步驟10;步驟10、判斷pos是否小于Num,如果是執(zhí)行步驟11,否則結(jié)束壓縮過(guò)程;步驟11、建立一個(gè)新的記錄單元,設(shè)定color=pclr,count=0;執(zhí)行步驟6。
實(shí)施例2對(duì)于一款64K色的彩屏手機(jī),該款手機(jī)中共包含圖形1894幅,共占用空間3,148,742byte,應(yīng)用本發(fā)明所提供的方法進(jìn)行壓縮后,占用空間1,245,786byte,共節(jié)省空間1,902,956byte,總的壓縮率為1902956÷3148742=60.4%。采用壓縮后圖形顯示速度沒(méi)有受到影響,同時(shí)也未發(fā)現(xiàn)有圖形顯示異?;蛘呤д娴那闆r,由此可見(jiàn),應(yīng)用本發(fā)明所提供的壓縮方法不但壓縮比率高,而且不影響圖形顯示速度。
最后所應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明而非限制本發(fā)明的技術(shù)方案,盡管參照上述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對(duì)本發(fā)明進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種圖形文件的無(wú)損壓縮方法,其特征在于包括以下步驟步驟一、采用預(yù)先選定的多個(gè)不同的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)對(duì)圖形文件像素點(diǎn)陣進(jìn)行預(yù)壓縮,選取壓縮結(jié)果所占存儲(chǔ)空間最小的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù);步驟二、按選定的壓縮結(jié)果所占存儲(chǔ)空間最小的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),對(duì)圖形文件進(jìn)行壓縮;步驟三、將壓縮文件頭信息和步驟二得到的壓縮后數(shù)據(jù)寫入文件,生成壓縮文件。
2.根據(jù)權(quán)利要求1所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的預(yù)壓縮包括如下步驟步驟1.1根據(jù)預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)的初值,對(duì)圖形文件像素點(diǎn)陣進(jìn)行壓縮;步驟1.2保存壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間的大小和壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)初值;
3.根據(jù)權(quán)利要求2所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的步驟1.1中對(duì)圖形文件像素點(diǎn)陣的壓縮過(guò)程,包括如下步驟步驟A1、建立一個(gè)記錄單元,按圖形文件的bpp設(shè)定的顏色值存儲(chǔ)空間存儲(chǔ)像素點(diǎn)的顏色值,按壓縮計(jì)數(shù)器長(zhǎng)度初值設(shè)定存儲(chǔ)空間來(lái)存儲(chǔ)相同顏色值連續(xù)點(diǎn)個(gè)數(shù);步驟A2、取圖形文件點(diǎn)陣最左上點(diǎn)作為當(dāng)前點(diǎn),在記錄單元中記錄當(dāng)前點(diǎn)的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A3、判斷當(dāng)前點(diǎn)右方的像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同,如果到達(dá)行的末尾,判斷當(dāng)前點(diǎn)下一行最左像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同;如果相同執(zhí)行步驟A4,如果不相同執(zhí)行步驟A5;步驟A4、相同顏色值連續(xù)點(diǎn)個(gè)數(shù)加一;如果相同顏色值連續(xù)點(diǎn)個(gè)數(shù)再加一,會(huì)超出了壓縮計(jì)數(shù)器長(zhǎng)度值設(shè)定存儲(chǔ)空間,則建立一個(gè)新的記錄單元,在記錄單元中記錄顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A5、建立一個(gè)新的記錄單元,在記錄單元中記錄新的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟A6、將當(dāng)前點(diǎn)移動(dòng)到右方的像素點(diǎn),如果到達(dá)行的末尾,當(dāng)前點(diǎn)移動(dòng)到下一行最左像素點(diǎn),執(zhí)行步驟A3;如果達(dá)到最右下點(diǎn),則結(jié)束整個(gè)壓縮過(guò)程。
4.根據(jù)權(quán)利要求3所述的圖形文件的無(wú)損壓縮方法,其特征在于所述步驟1.1中的記錄顏色值和相同顏色值連續(xù)點(diǎn)個(gè)數(shù)的方法,在步驟A1之前,還包括如下步驟步驟B1預(yù)先設(shè)定任意兩種不同顏色異或運(yùn)算后的顏色值,相同顏色異或運(yùn)算后的顏色值為零;步驟B2把圖形點(diǎn)陣每一行與它的上一行進(jìn)行異或運(yùn)算作為本行的結(jié)果,第一行數(shù)據(jù)不做任何處理,得到一個(gè)新的像素點(diǎn)陣。
5.根據(jù)權(quán)利要求2所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的步驟1.1中對(duì)圖形文件像素點(diǎn)陣的壓縮過(guò)程包括如下步驟步驟C1、建立一個(gè)記錄單元,先按壓縮計(jì)數(shù)器長(zhǎng)度初值設(shè)定存儲(chǔ)空間來(lái)存儲(chǔ)相同顏色值連續(xù)點(diǎn)個(gè)數(shù),再按圖形文件的bpp設(shè)定的顏色值存儲(chǔ)空間存儲(chǔ)像素點(diǎn)的顏色值;步驟C2、取圖形文件點(diǎn)陣最左上點(diǎn)作為當(dāng)前點(diǎn),在記錄單元中記錄當(dāng)前點(diǎn)的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C3、判斷當(dāng)前點(diǎn)右方的像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同,如果到達(dá)行的末尾,判斷當(dāng)前點(diǎn)下一行最左像素點(diǎn)的顏色是否與當(dāng)前點(diǎn)顏色相同;如果相同執(zhí)行步驟C4,如果不相同執(zhí)行步驟C5;步驟C4、相同顏色值連續(xù)點(diǎn)個(gè)數(shù)加一;如果相同顏色值連續(xù)點(diǎn)個(gè)數(shù)再加一,會(huì)超出了壓縮計(jì)數(shù)器長(zhǎng)度值設(shè)定存儲(chǔ)空間,則建立一個(gè)新的記錄單元,在記錄單元中記錄顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C5、判斷當(dāng)前點(diǎn)的顏色是否為零,如果為零執(zhí)行步驟C6;否則執(zhí)行步驟C7;步驟C6、改變記錄單元,不記錄顏色值,把為零顏色值的連續(xù)顏色相同像素?cái)?shù)目記為數(shù)目的相反數(shù),即記錄單元只含有一個(gè)負(fù)數(shù),負(fù)數(shù)的絕對(duì)值為連續(xù)顏色為零像素?cái)?shù)目;然后執(zhí)行步驟C7;步驟C7、建立一個(gè)新的記錄單元,在記錄單元中記錄新的顏色值,設(shè)置相同顏色值連續(xù)點(diǎn)個(gè)數(shù)為一;步驟C8、將當(dāng)前點(diǎn)移動(dòng)到右方的像素點(diǎn),如果到達(dá)行的末尾,當(dāng)前點(diǎn)移動(dòng)到下一行最左像素點(diǎn),執(zhí)行步驟C3;如果達(dá)到最右下點(diǎn),則結(jié)束整個(gè)壓縮過(guò)程。
6.根據(jù)權(quán)利要求5所述的圖形文件的無(wú)損壓縮方法,其特征在于在步驟C1之前,還包括如下步驟步驟D1預(yù)先設(shè)定任意兩種不同顏色異或運(yùn)算后的顏色值,相同顏色異或運(yùn)算后的顏色值為零;步驟D2把圖形點(diǎn)陣每一行與它的上一行進(jìn)行異或運(yùn)算作為本行的結(jié)果,第一行數(shù)據(jù)不做任何處理,得到一個(gè)新的像素點(diǎn)陣。
7.根據(jù)權(quán)利要求1-6任一所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的選取最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),包括如下步驟步驟1.3在預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)取值范圍內(nèi)設(shè)定初值,對(duì)圖形文件點(diǎn)陣進(jìn)行預(yù)壓縮;步驟1.4在預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)取值范圍內(nèi)設(shè)定新的初值,對(duì)圖形文件點(diǎn)陣進(jìn)行預(yù)壓縮;步驟1.5比較預(yù)壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間,保存壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間小的預(yù)壓縮的壓縮后數(shù)據(jù)存儲(chǔ)空間和壓縮計(jì)數(shù)器長(zhǎng)度值;步驟1.6如果壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)取值已經(jīng)遍歷完全部預(yù)先設(shè)定的取值范圍,則結(jié)束步驟一,保存的壓縮計(jì)數(shù)器長(zhǎng)度值就是最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù);否則,執(zhí)行步驟1.7;步驟1.7在預(yù)先設(shè)定的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)取值范圍內(nèi)沒(méi)有取到的參數(shù)中設(shè)定新的初值,對(duì)圖形文件點(diǎn)陣進(jìn)行預(yù)壓縮;步驟1.8比較保存的預(yù)壓縮與步驟1.7中預(yù)壓縮的壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間,保存壓縮后數(shù)據(jù)占據(jù)的存儲(chǔ)空間小的預(yù)壓縮的壓縮后數(shù)據(jù)存儲(chǔ)空間和壓縮計(jì)數(shù)器長(zhǎng)度值,執(zhí)行步驟1.6。
8.根據(jù)權(quán)利要求1所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的步驟三具體為首先,將壓縮文件頭信息寫入文件,然后,將步驟二中壓縮后得到的全部數(shù)據(jù),按生成的順序?qū)懭氲轿募?,得到壓縮后的文件。
9.根據(jù)權(quán)利要求7所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的步驟三具體為首先,將壓縮文件頭信息寫入文件,然后,將步驟二中壓縮后得到的全部數(shù)據(jù),按生成的順序?qū)懭氲轿募?,得到壓縮后的文件。
10.根據(jù)權(quán)利要求8或9所述的圖形文件的無(wú)損壓縮方法,其特征在于所述的壓縮文件的頭信息包括壓縮后圖形所占存儲(chǔ)空間的大小、壓縮圖形寬度、壓縮圖形高度、壓縮圖形的bbp和壓縮計(jì)數(shù)器長(zhǎng)度值。
全文摘要
本發(fā)明公開(kāi)了一種應(yīng)用于嵌入式個(gè)人終端設(shè)備的無(wú)損圖形文件壓縮方法;首先,采用預(yù)先設(shè)定的多個(gè)不同的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù)對(duì)圖形文件進(jìn)行預(yù)壓縮,選取最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù);然后,按選定最優(yōu)的壓縮計(jì)數(shù)器長(zhǎng)度參數(shù),對(duì)圖形文件進(jìn)行壓縮;最后,將圖片信息、壓縮信息等頭文件信息和壓縮后數(shù)據(jù)寫入文件,生成壓縮文件。本發(fā)明的壓縮方法適用于從單色到真彩的所有圖形文件,可以大大壓縮嵌入式系統(tǒng)的存儲(chǔ)空間,從而降低存儲(chǔ)成本;由于本方法對(duì)解壓縮的高效,不占用過(guò)多的系統(tǒng)資源,顯示本方法壓縮后圖形對(duì)速度幾乎沒(méi)有影響,而且圖形沒(méi)有失真。
文檔編號(hào)G06T9/00GK1595452SQ03156599
公開(kāi)日2005年3月16日 申請(qǐng)日期2003年9月10日 優(yōu)先權(quán)日2003年9月10日
發(fā)明者馬曉軍 申請(qǐng)人:聯(lián)想(北京)有限公司