本發(fā)明涉及一種視頻編碼技術,特別是一種紋理磚壓縮及解壓縮方法以及使用該方法的裝置。
背景技術:
:圖像壓縮使用先進的編碼技術,用以移除圖像數(shù)據(jù)中的冗余。于目前的高分辨率屏幕,例如4K屏幕,圖形處理中的紋理磚若全部使用無損壓縮,可能需要耗費大量的內存空間,進而增加硬件成本。因此,需要一種紋理磚壓縮及解壓縮方法以及使用該方法的裝置,用以節(jié)省內存空間的使用。技術實現(xiàn)要素:本發(fā)明的實施例提出一種紋理磚壓縮方法,至少包含以下步驟。無損壓縮紋理磚的原始數(shù)據(jù)后,判斷原始數(shù)據(jù)的無損壓縮結果的長度是否大于目標長度。如果是,執(zhí)行多層次數(shù)據(jù)縮減控制,用以縮減原始數(shù)據(jù)以產生縮減數(shù)據(jù),并且產生縮減數(shù)據(jù)的無損壓縮結果,使得縮減數(shù)據(jù)的無損壓縮結果的長度小于或等于目標長度。本發(fā)明的實施例提出一種紋理磚壓縮裝置,至少包含內存控制器、壓縮器、減法器以及數(shù)據(jù)縮減控制器。數(shù)據(jù)縮減控制器耦接至內存控制器、壓縮器及減法器,指示內存控制器輸出紋理磚的原始數(shù)據(jù)至壓縮器,使得壓縮器產生原始數(shù)據(jù)的無損壓縮結果,并且判斷原始數(shù)據(jù)的無損壓縮結果的長度是否大于目標長度。當原始數(shù)據(jù)的無損壓縮結果的長度大于目標長度時,數(shù)據(jù)縮減控制器執(zhí)行多層次數(shù)據(jù)縮減控制,用以指示減法器縮減原始數(shù)據(jù)以產生縮減數(shù)據(jù),并指示內存控制器輸出縮減數(shù)據(jù)至壓縮器,使得壓縮器產生縮減數(shù)據(jù)的無損壓縮結果,其中,縮減數(shù)據(jù)的無損壓縮結果的長度小于或等于目標長度。本發(fā)明的實施例提出一種紋理磚解壓縮方法,至少包含以下步驟。于接收壓縮結果及減損程度旗標后,解壓縮壓縮結果以產生解壓縮數(shù)據(jù),并依據(jù)減損程度旗標判斷壓縮結果是否經過數(shù)據(jù)縮減。當壓縮結果經過數(shù)據(jù)縮減時,恢復解壓縮數(shù)據(jù)至原始長度以產生恢復結果,以及輸出恢復結果給三維繪圖流水線中的紋理操作。附圖說明圖1是依據(jù)本發(fā)明實施例的紋理磚壓縮方法流程圖。圖2是依據(jù)本發(fā)明實施例的紋理磚壓縮裝置的方塊圖。圖3是依據(jù)本發(fā)明實施例的紋理磚解壓縮方法流程圖。圖4A及4B是依據(jù)本發(fā)明實施例的紋理磚示意圖。圖5是依據(jù)本發(fā)明實施例的紋理磚壓縮方法流程圖。圖6A及6B是依據(jù)本發(fā)明實施例的紋理磚分群示意圖。圖7是依據(jù)本發(fā)明實施例的紋理磚壓縮裝置的方塊圖。圖8是依據(jù)本發(fā)明實施例的紋理磚解壓縮方法流程圖。具體實施方式以下說明為完成發(fā)明的較佳實現(xiàn)方式,其目的在于描述本發(fā)明的基本精神,但并不用以限定本發(fā)明。實際的
發(fā)明內容必須參考之后的權利要求范圍。必須了解的是,使用于本說明書中的“包含”、“包括”等詞,用以表示存在特定的技術特征、數(shù)值、方法步驟、作業(yè)處理、組件以及/或組件,但并不排除可加上更多的技術特征、數(shù)值、方法步驟、作業(yè)處理、組件、組件,或以上的任意組合。在權利要求中使用如“第一”、“第二”、“第三”等詞是用來修飾權利要求中的元件,并非用來表示之間具有優(yōu)先權順序,先行關系,或者是一個元件先于另一個元件,或者是執(zhí)行方法步驟時的時間先后順序,僅用來區(qū)別具有相同名字的元件。為了不影響紋理磚的信息,本發(fā)明實施例首先無損壓縮紋理磚的原始數(shù)據(jù),并且判斷原始數(shù)據(jù)的無損壓縮結果的長度是否降低至目標長度之內。當原始數(shù)據(jù)的無損壓縮結果的長度大于目標長度時,對原始數(shù)據(jù)進行縮減。然而,數(shù)據(jù)縮減會減損紋理磚的原始數(shù)據(jù)的信息。為了讓壓縮后紋理磚的信息縮減程度越低越好,本發(fā)明實施例提出一種多層次數(shù)據(jù)縮減控制,最小程度地縮減原始數(shù)據(jù)來產生縮減數(shù)據(jù),并且產生縮減數(shù)據(jù)的無損壓縮結果,使得縮減數(shù)據(jù)的無損壓縮結果的長度小于或等于目標長度。于多層次數(shù)據(jù)縮減控制中,先縮減原始數(shù)據(jù)至一個程度以產生縮減數(shù)據(jù),并且無損壓縮此縮減數(shù)據(jù)。當縮減數(shù)據(jù)的無損壓縮結果的長度不能降低至目標長度時,對原始數(shù)據(jù)進行更大程度的縮減(亦即是,下一層次的縮減)。此外,當數(shù)據(jù)縮減的次數(shù)達到默認值時,直接將原始數(shù)據(jù)縮減至目標長度之內的長度,用以避免消耗太多時間來執(zhí)行數(shù)據(jù)縮減及無損壓縮。圖1是依據(jù)本發(fā)明實施例的紋理磚壓縮方法流程圖。此方法可執(zhí)行于紋理編碼器(textureencoder)。于接收一個紋理磚(texturetile)的原始數(shù)據(jù)后(步驟S110),對原始數(shù)據(jù)執(zhí)行無損壓縮算法(步驟S131)。舉例來說,紋理磚可包含8x8畫素,格式可為RGBA8888,其中,R、G、B及A通道各使用8比特表示,使得原始數(shù)據(jù)的長度為2048比特。目標長度可設為1024比特。接著,計算無損壓縮結果的長度(步驟S133),并判斷是否超過目標長度(步驟S151)。如果沒有超過目標長度(步驟S151中“否”的路徑),代表原始數(shù)據(jù)的無損壓縮成功,輸出無損壓縮結果及減損程度旗標(lossy-levelflag)(步驟S190)。減損程度旗標可為“0b00”,表示紋理磚的原始數(shù)據(jù)沒有經過縮減。如果超過目標長度(步驟S151中“是”的路徑),代表原始數(shù)據(jù)的無損壓縮失敗,接著,進行多層次的數(shù)據(jù)縮減(步驟S171或S173)以及對縮減后紋理磚數(shù)據(jù)進行無損壓縮(步驟S131)。在每個層次的數(shù)據(jù)縮減及縮減后紋理磚數(shù)據(jù)的無損壓縮中,首先判斷執(zhí)行過的數(shù)據(jù)縮減次數(shù)是否超過默認值(步驟S153)??墒褂糜嫈?shù)器來表示執(zhí)行過的數(shù)據(jù)縮減次數(shù)。計數(shù)器初始為0,并且于每次執(zhí)行完縮減紋理磚的原始數(shù)據(jù)后(步驟S171),將計數(shù)器加1。如果沒有超過默認值(步驟S153中“否”的路徑),縮減紋理磚的原始數(shù)據(jù)(步驟S171)。如果超過默認值(步驟S153中“是”的路徑),縮減紋理磚的原始數(shù)據(jù)至目標長度之內的長度(步驟S173)。于一些實施例中,可使用公式(1)、(2)及(3)來縮減紋理磚的原始數(shù)據(jù):Ri=Ri/mj(1)Gi=Gi/mj(2)Bi=Bi/mj(3)Ri代表原始數(shù)據(jù)的第i個畫素的R值,Gi代表原始數(shù)據(jù)的第i個畫素的G值,Bi代表原始數(shù)據(jù)的第i個畫素的B值,以及mj代表第j次數(shù)據(jù)縮減的常數(shù)且j越大則mj越大。于此須注意的是,公式(1)至(3)產生的余數(shù)直接舍棄。于一些實施例中,步驟S153的默認值可設為2。此外,m1可設為2,m2可設為3,m3可設為8。于第一層數(shù)據(jù)縮減時,可將紋理磚的原始數(shù)據(jù)(包含R、G及B通道,或者R、G、B及A通道)除以m1(步驟S171)。接著,對縮減數(shù)據(jù)執(zhí)行無損壓縮算法(步驟S131),并判斷無損壓縮結果的長度是否超過目標長度(步驟S151)。如果沒有超過目標長度(步驟S151中“否”的路徑),代表縮減數(shù)據(jù)的無損壓縮成功,輸出縮減數(shù)據(jù)的無損壓縮結果及減損程度旗標“0b01”,用以表示紋理磚的原始數(shù)據(jù)已經過第一層數(shù)據(jù)縮減(步驟S190)。如果超過目標長度(步驟S151中“是”的路徑),代表原始數(shù)據(jù)壓縮失敗,接著,進行下一層次的數(shù)據(jù)縮減處理(步驟S153、S171及S173)。于第二層數(shù)據(jù)縮減時,可將紋理磚的原始數(shù)據(jù)(包含R、G及B通道,或者R、G、B及A通道)除以m2(步驟S171)。接著,對縮減數(shù)據(jù)執(zhí)行無損壓縮算法(步驟S131),并判斷無損壓縮結果的長度是否超過目標長度(步驟S151)。如果沒有超過目標長度(步驟S151中“否”的路徑),代表縮減數(shù)據(jù)的無損壓縮成功,輸出縮減數(shù)據(jù)的壓縮結果及減損程度旗標“0b10”,用以表示紋理磚的原始數(shù)據(jù)已經過第二層數(shù)據(jù)縮減(步驟S190)。于第三層數(shù)據(jù)縮減時,可直接將紋理磚的原始數(shù)據(jù)(包含R、G及B通道,或者R、G、B及A通道)除以m3(步驟S173),輸出縮減數(shù)據(jù)及減損程度旗標“0b11”,表示紋理磚的原始數(shù)據(jù)已強迫縮減至目標長度內的長度(步驟S190)。在另一些實施例中,步驟S153的默認值可設為3。m1可設為2,m2可設為3,m3可設為8,m4可設為16。步驟S190中的減損程度旗標可使用三個比特表示,其中,“0b000”表示紋理磚的原始數(shù)據(jù)沒有經過縮減,“0b001”表示紋理磚的原始數(shù)據(jù)已經過第一層數(shù)據(jù)縮減,“0b010”表示紋理磚的原始數(shù)據(jù)已經過第二層數(shù)據(jù)縮減,“0b011”表示紋理磚的原始數(shù)據(jù)已經過第三層數(shù)據(jù)縮減,“0b100”或“0b111”表示紋理磚的原始數(shù)據(jù)已強迫縮減至目標長度內的長度。在一些實施例中,無損壓縮算法可先降低畫素內或/以及畫素間的關聯(lián)性,然后再進行無損編碼。為降低畫素內的關聯(lián)性,可對每一畫素中R、G及B通道進行運算。為降低畫素間的關聯(lián)性,除了紋理磚的畫素(0,0)外,每一個畫素的R值、G值及B值可分別減去畫素(0,0)的R值、G值及B值。在另一些實施例中,無損壓縮算法可先偵測紋理磚是否符合數(shù)個預測模式中之一者。如果是,則保留幾個畫素的數(shù)據(jù),產生預測旗標以表示符合的預測模式,以及記錄此預測模式的必要信息,例如,角度、長度、寬度等。例如,當紋理磚包含純色(solidcolor)時,可只留下一個畫素的數(shù)據(jù)并使用預測旗標表示此為純色磚。若找不到符合的預測模式,先降低畫素內或/畫素間的關聯(lián)性,然后再進行無損編碼。無損編碼可使用適應性字典編碼(adaptivedictionaryencoding)、一元編碼(unaryencoding)、熵編碼(entropyencoding)等。圖2是依據(jù)本發(fā)明實施例的紋理磚壓縮裝置的方塊圖。數(shù)據(jù)縮減控制器250指示內存控制器210輸出紋理磚的原始數(shù)據(jù)至壓縮器230,使得壓縮器230產生原始數(shù)據(jù)的無損壓縮結果。接著,數(shù)據(jù)縮減控制器250判斷原始數(shù)據(jù)的無損壓縮結果的長度是否大于目標長度。如果是,數(shù)據(jù)縮減控制器250執(zhí)行多層次數(shù)據(jù)縮減控制,用以指示減法器241縮減原始數(shù)據(jù)以產生縮減數(shù)據(jù),并指示內存控制器210輸出縮減數(shù)據(jù)至壓縮器230,使得壓縮器230產生縮減數(shù)據(jù)的無損壓縮結果,其中,縮減數(shù)據(jù)的無損壓縮結果小于或等于上述目標長度。多層次數(shù)據(jù)縮減控制最小程度地縮減原始數(shù)據(jù)來產生縮減數(shù)據(jù)。于多層次數(shù)據(jù)縮減控制中,數(shù)據(jù)縮減控制器250指示減法器241縮減原始數(shù)據(jù)至一個程度以產生縮減數(shù)據(jù),并且指示內存控制器210輸出縮減數(shù)據(jù)至壓縮器230,使得壓縮器230產生縮減數(shù)據(jù)的無損壓縮結果。當縮減數(shù)據(jù)的無損壓縮結果的長度大于目標長度且數(shù)據(jù)縮減的次數(shù)沒有達到默認值時,數(shù)據(jù)縮減控制器250指示減法器241對原始數(shù)據(jù)進行更大程度的縮減。當縮減數(shù)據(jù)的無損壓縮結果的長度大于目標長度且數(shù)據(jù)縮減的次數(shù)達到默認值時,數(shù)據(jù)縮減控制器250指示減法器241直接將原始數(shù)據(jù)縮減至目標長度內的長度,并且輸出縮減結果而不進行無損壓縮。詳細來說,數(shù)據(jù)縮減控制器250可于接收到一個紋理磚的原始數(shù)據(jù)后,指示內存控制器210儲存原始數(shù)據(jù)至內存220中的區(qū)域221并輸出原始數(shù)據(jù)至壓縮器230,使得壓縮器230可針對原始數(shù)據(jù)執(zhí)行無損壓縮算法。壓縮器230可對從內存控制器210接收的原始數(shù)據(jù)執(zhí)行無損壓縮算法,并且將壓縮結果輸出至數(shù)據(jù)縮減控制器250。壓縮器230的細節(jié)可參考步驟S131的說明,不再贅述。數(shù)據(jù)縮減控制器250可包含計數(shù)器來表示執(zhí)行過的數(shù)據(jù)縮減次數(shù),初始為0。數(shù)據(jù)縮減控制器250可使用多種方式實施,例如以專用硬件電路或通用硬件(例如,單一處理器、具平行處理能力的多處理器、圖形處理器或其它具運算能力的處理器),并且在執(zhí)行程序代碼或軟件時,提供特定的功能。數(shù)據(jù)縮減控制器250計算無損壓縮結果的長度,并且判斷是否超過目標長度。當計數(shù)器為0且無損壓縮結果的長度不超過目標長度時,數(shù)據(jù)縮減控制器250通過輸出接口260輸出無損壓縮結果及減損程度旗標給其它電子組件,其中的減損程度旗標表示紋理磚的原始數(shù)據(jù)沒有經過縮減。當計數(shù)器小于或等于默認值且無損壓縮結果的長度超過目標長度時,數(shù)據(jù)縮減控制器250控制除法器241用以將內存220中原始數(shù)據(jù)的每一畫素的R、G及B值除以常數(shù)m1至mj-1中之相應一者來產生縮減數(shù)據(jù),控制解復用器(de-multiplexer)243將縮減數(shù)據(jù)輸出到內存220中的區(qū)域223,以及控制內存控制器210從內存220的區(qū)域223讀取縮減數(shù)據(jù)并輸出至壓縮器230,其中,j為默認值加1。寄存器245可儲存常數(shù)m1至mj。常數(shù)m1至mj的設定實施例可參考以上段落的說明,不再贅述。當計數(shù)器小于或等于默認值且無損壓縮結果的長度沒有超過目標長度時,數(shù)據(jù)縮減控制器250輸出無損壓縮結果及減損程度旗標給其它電子組件,其中的減損程度旗標表示紋理磚的原始數(shù)據(jù)經過特定層次的縮減。減損程度旗標的設定實施例可參考以上段落的說明,不再贅述。當計數(shù)器大于默認值且壓縮結果的長度超過目標長度時,數(shù)據(jù)縮減控制器250控制除法器241用以將內存220中原始數(shù)據(jù)的每一畫素的R、G及B通道除以常數(shù)mj來產生縮減數(shù)據(jù),控制解復用器243將縮減數(shù)據(jù)輸出到數(shù)據(jù)縮減控制器250,以及通過輸出接口260輸出縮減數(shù)據(jù)及減損程度旗標給其它電子組件,其中的減損程度旗標表示紋理磚的原始數(shù)據(jù)已強迫縮減至目標長度內的長度。除法器241可實施公式(1)至(3)來縮減紋理磚的原始數(shù)據(jù)。為了恢復如上所述的經多層次數(shù)據(jù)縮減的紋理磚,圖3是依據(jù)本發(fā)明實施例的紋理磚解壓縮方法流程圖。此方法可執(zhí)行于紋理譯碼器。在接收一個壓縮結果及減損程度旗標后(步驟S310),依據(jù)減損程度旗標判斷紋理磚的原始數(shù)據(jù)是否強迫縮減至目標長度內的長度(步驟S320)。例如,判斷減損程度旗標是否為“0b11(以二個比特表示)”、“0b100(以三個比特表示)”或“0b111(以三個比特表示)”。如果是(步驟S320中“是”的路徑),直接恢復壓縮結果至原始長度(步驟S351)及輸出恢復結果給三維(3D,three-dimensional)繪圖流水線中的紋理操作(步驟S360)。于一些實施例中,可使用公式(4)、(5)及(6)來直接恢復壓縮結果:Ri=Ri*mmax+cmax(4)Gi=Gi*mmax+cmax(5)Bi=Bi*mmax+cmax(6)Ri代表壓縮結果的第i個畫素的R值,Gi代表壓縮結果的第i個畫素的G值,Bi代表壓縮結果磚的第i個畫素的B值,mmax代表恢復常數(shù),cmax代表補償常數(shù)。假設紋理磚的原始數(shù)據(jù)長度為2048比特,而壓縮結果的目標長度設為1024比特:mmax可依據(jù)經驗設為8,cmax可依據(jù)經驗設為3或6。當紋理磚的原始數(shù)據(jù)并非強迫縮減至目標長度內的長度時(步驟S320中“否”的路徑),解壓縮接收到的壓縮結果以產生解壓縮數(shù)據(jù)(步驟S330)。在一些實施例中,步驟S330可先進行無損譯碼,再恢復畫素內或/以及畫素間的關聯(lián)性。無損譯碼可使用適應性字典譯碼(adaptivedictionarydecoding)、一元譯碼(unarydecoding)、熵譯碼(entropydecoding)等。為恢復畫素內的關聯(lián)性,可使用公式恢復每一畫素中的R、G及B通道。為恢復畫素間的關聯(lián)性,除了紋理磚的第一個畫素外,每一個畫素的R值、G值、B值及A值可分別加上第一個畫素的R值、G值、B值及A值。在另一些實施例中,步驟S330可先依據(jù)預測旗標來偵測接收到的紋理磚數(shù)據(jù)是否符合數(shù)個預測模式中之一者。如果是,則依據(jù)偵測到的預測模式及相關的畫素數(shù)據(jù)產生紋理磚的原始數(shù)據(jù)。例如,當偵測到紋理磚包含純色(solidcolor)時,則將其中的唯一畫素數(shù)據(jù)填滿整個紋理磚(8x8畫素)。若找不到符合的預測模式,先進行無損譯碼,再恢復畫素內或/以及畫素間的關聯(lián)性。接著,依據(jù)減損程度旗標判斷壓縮結果是否經過數(shù)據(jù)縮減(步驟S340)。例如,可判斷減損程度旗標是否為“0b00(以二個比特表示)”或“0b000(以三個比特表示)”。如果不是(步驟S340中“否”的路徑),輸出譯碼結果給3D繪圖流水線中的紋理操作(步驟S360)。如果壓縮結果經過數(shù)據(jù)縮減(步驟S340中“是”的路徑),依據(jù)減損程度旗標恢復解壓縮數(shù)據(jù)至原始長度以產生恢復結果(步驟S353)及輸出恢復結果給3D繪圖流水線中的紋理操作(步驟S360)。于一些實施例中,可使用公式(7)、(8)及(9)來恢復解壓縮數(shù)據(jù):Ri=Ri*mj+cj(7)Gi=Gi*mj+cj(8)Bi=Bi*mj+cj(9)Ri代表解壓縮數(shù)據(jù)的第i個畫素的R值,Gi代表解壓縮數(shù)據(jù)的第i個畫素的G值,Bi代表解壓縮數(shù)據(jù)的第i個畫素的B值,mj代表第j次縮減的恢復常數(shù),j越大則mj越大,mj小于mmax,cj代表第j次縮減的補償常數(shù),j越大則cj越大,并且cj小于cmax。mj可根據(jù)壓縮減損旗標決定,并且Cj可根據(jù)過去經驗設為2、4等。紋理磚可能包含文字的信息。圖4A及4B是依據(jù)本發(fā)明實施例的紋理磚示意圖。于一些實施例中,參考圖4A,紋理磚410包含英文字母“J”,其中,英文字母中的畫素(如斜線所示,又可稱為前景畫素)通常為純色或接近純色,并且前景畫素與背景畫素間的差異較大。在另一些實施例中,參考第4B圖,除了前景畫素與背景畫素外,紋理磚430中的文字畫素與背景畫素間包含陰影(如網(wǎng)點所示,又可稱為中間畫素)。然而,降低畫素間關聯(lián)性的算法應該考慮紋理磚是否包含文字信息,否則,可能妨害之后的無損編碼而無法將紋理磚的數(shù)據(jù)壓縮至目標長度。圖5是依據(jù)本發(fā)明實施例的紋理磚壓縮方法流程圖。此方法可執(zhí)行于紋理編碼器。在接收一個紋理磚(texturetile)的原始數(shù)據(jù)后(步驟S110),對原始數(shù)據(jù)執(zhí)行無損壓縮算法(步驟S510)。于步驟S110中,將文字旗標初始設為“0”用以指示使用第一種算法來降低畫素間的關聯(lián)性。舉例來說,紋理磚可包含8x8畫素,格式可為RGBA8888,其中,R、G、B及A通道各使用8比特表示,使得原始數(shù)據(jù)的長度為2048比特。目標長度可設為1024比特。于步驟S510中,由于文字旗標為“0”,無損壓縮算法可先以第一種算法來降低畫素間的關聯(lián)性,然后再進行無損編碼。第一種算法將紋理磚的數(shù)據(jù)視為不包含文字的信息。于第一種算法的一些實施例中,除了紋理磚的畫素(0,0)外,每一個畫素的R值、G值及B值可分別減去畫素(0,0)的R值、G值及B值。熟習此技藝人士可根據(jù)不同的設計需求使用不同的第一種算法,本發(fā)明并不因此受限。無損編碼可使用適應性字典編碼(adaptivedictionaryencoding)、一元編碼(unaryencoding)、熵編碼(entropyencoding)等。接著,計算無損壓縮結果的長度(步驟S133),并判斷是否超過目標長度(步驟S151)。如果無損壓縮結果的長度沒有超過目標長度(步驟S151中“否”的路徑),代表原始數(shù)據(jù)的無損壓縮成功,輸出壓縮結果、文字旗標及減損程度旗標(步驟S540)。文字旗標為“0”用以指示壓縮結果使用第一種算法來降低畫素間的關聯(lián)性。減損程度旗標可為“0b00”,表示紋理磚的原始數(shù)據(jù)沒有經過縮減。如果無損壓縮結果的長度超過目標長度(步驟S151中“是”的路徑),代表原始數(shù)據(jù)的無損壓縮失敗,判斷文字旗標是否為“0”(步驟S520)。如果是(步驟S520中“是”的路徑),將文字旗標設為“1”用以指示使用第二種算法來降低畫素間的關聯(lián)性,并且產生位圖用以包含紋理磚中每一畫素屬于多個群組中之一者的信息(步驟S530)。第二種算法是先將紋理磚中的畫素分至多個群組,并將降低每一群組中的畫素間的關聯(lián)性。例如,標示紋理磚中每一畫素為前景(foreground)或背景(background),或者標示紋理磚中每一畫素為前景、中間(intermediary)或背景。于步驟S530的一些實施例,詳細來說,產生紋理磚的R、G及B通道直方圖,并據(jù)以分別計算R、G及B通道邊界值(boundaryvalues)。邊界值可為直方圖的平均數(shù)或中位數(shù)。接著,判斷每一畫素中的R、G及B值是否分別大于R、G及B通道的邊界值。當一個畫素的R、G及B值中的任意二者大于相應邊界值,則將此畫素標示前景畫素。否則,將此畫素標示為背景畫素。舉例來說,可使用表1的位圖(bitmap)來表示紋理磚410,其中,每個畫素以一個比特表示為前景或背景畫素:表10111111000011000000110000001100000011000100110001111100001110000其中,“1”代表前景畫素,“0”代表背景畫素,前景畫素集合起來可形成一個字母、數(shù)字、符號等。于步驟S530的另一些實施例,詳細來說,產生紋理磚的R、G及B通道直方圖,并據(jù)以分別計算R、G及B通道中間范圍(middleranges),每一個中間范圍包含一個下限值(lowervalue)及一個上限值(uppervalue)。接著,分別比對每一畫素中的R、G及B值是否大于R、G及B通道的上限值,以及是否小于R、G及B通道的下限值。當一個畫素的R、G及B值中的任意二者大于相應上限值,則將此畫素標示前景畫素。當一個畫素的R、G及B值中的任意二者小于相應下限值,則將此畫素標示背景畫素。當一個畫素既非前景畫素亦非背景畫素,將此畫素標示為中間畫素。舉例來說,可使用表2的位圖來表示紋理磚430,其中,每個畫素以二個比特表示為前景、中間或背景畫素:表200111111111111100000001111101000000000111110000000000011111000000000001111100000110000111110000011111111111000000011111110000000其中,“11”代表前景畫素,“10”代表中間畫素,“00”代表背景畫素,前景畫素集合起來可形成一個字母、數(shù)字、符號等,中間畫素可形成陰影。接著,于步驟S510中,由于文字旗標為“1”,無損壓縮算法可以第二種算法來降低畫素間的關聯(lián)性,然后再進行無損編碼。第二種算法將紋理磚的數(shù)據(jù)視為包含文字的信息。第二種算法先依據(jù)位圖(如表1或表2所示)把畫素分為二個或三個群組。圖6A是依據(jù)本發(fā)明實施例的紋理磚分群示意圖。例如,依據(jù)表1的位圖,紋理磚410可分為前景群組611及背景群組613。圖6B是依據(jù)本發(fā)明實施例的紋理磚分群示意圖。例如,依據(jù)表2的位圖,紋理磚430可分為前景群組631、中間群組633及背景群組635。在一些實施例中,于每一個群組中,除了最左上畫素外,每一個畫素的R值、G值及B值可分別減去最左上畫素的R值、G值及B值。接著,計算壓縮結果的長度(步驟S133),并判斷是否超過目標長度(步驟S151)。如果壓縮結果的長度沒有超過目標長度(步驟S151中“否”的路徑),代表原始數(shù)據(jù)的無損壓縮成功,輸出壓縮結果、文字旗標、位圖及減損程度旗標(步驟S540)。文字旗標為“1”用以指示壓縮結果使用第二種算法來降低畫素間的關聯(lián)性。減損程度旗標可為“0b00”,表示紋理磚的原始數(shù)據(jù)沒有經過縮減。如果超過目標長度(步驟S151中“是”的路徑),代表原始數(shù)據(jù)壓縮失敗,接著,進行多層次的數(shù)據(jù)縮減(步驟S520及步驟S171或S173)以及對縮減數(shù)據(jù)進行無損壓縮(步驟S131)。在多層次的數(shù)據(jù)縮減中,如果文字旗標不是“0”(步驟S520中“否”的路徑),判斷執(zhí)行過的數(shù)據(jù)縮減次數(shù)是否超過默認值(步驟S153)。如果沒有超過默認值(步驟S153中“否”的路徑),縮減紋理磚的原始數(shù)據(jù)(步驟S171)??s減紋理磚的原始數(shù)據(jù)后(步驟S171),對縮減數(shù)據(jù)執(zhí)行無損壓縮算法(步驟S510)。在步驟S510中,由于文字旗標為“1”,無損壓縮算法可先以第二種算法來降低畫素間的關聯(lián)性,然后再進行無損編碼。如果壓縮結果的長度沒有超過目標長度(步驟S151中“否”的路徑),代表原始數(shù)據(jù)壓縮成功,輸出壓縮結果、文字旗標、位圖及減損程度旗標(步驟S540)。文字旗標為“1”用以指示壓縮結果使用第二種算法來降低畫素間的關聯(lián)性。于一些實施例中,減損程度旗標可使用二個比特表示為“0b01”或“0b10”,用以表示紋理磚的原始數(shù)據(jù)經過特定層次的縮減。于另一些實施例中,減損程度旗標可使用三個比特表示為“0b001”、“0b010”或“0b011”,用以表示紋理磚的原始數(shù)據(jù)經過特定層次的縮減。減損程度旗標的設定可參考圖1的相關說明。如果壓縮結果的長度超過目標長度(步驟S151中“是”的路徑),代表原始數(shù)據(jù)壓縮失敗,判斷執(zhí)行過的數(shù)據(jù)縮減次數(shù)是否超過默認值(步驟S153)。如果沒有超過默認值(步驟S153中“否”的路徑),進行紋理磚的原始數(shù)據(jù)的下一層次縮減(步驟S171)。步驟S153及步驟S171的技術細節(jié)可參考圖1中的相關說明。如果超過默認值(步驟S153中“是”的路徑),縮減紋理磚的原始數(shù)據(jù)至目標長度內的長度(步驟S173),并且輸出壓縮結果及減損程度旗標(步驟S540)。于一些實施例中,減損程度旗標可使用二個比特表示為“0b11”,用以表示紋理磚的原始數(shù)據(jù)已強迫縮減至目標長度內的長度。于另一些實施例中,減損程度旗標可使用三個比特表示為“0b100”或“0b111”,用以表示紋理磚的原始數(shù)據(jù)已強迫縮減至目標長度內的長度。于此須注意的是,熟習此技藝人士可修改圖5所示的流程圖,而不進行數(shù)據(jù)縮減(如步驟S153、S171及S173),本發(fā)明并不因此受限。也就是說,步驟S250中“否”的路徑可連接至步驟S540,并且,步驟S540不輸出減損程度旗標。圖7是依據(jù)本發(fā)明實施例的紋理磚壓縮裝置的方塊圖。壓縮器710可使用如步驟S510所示的二種算法中之一者來降低畫素間的關聯(lián)性,然后再進行無損編碼。壓縮器710中實施的無損壓縮算法的細節(jié)可參考步驟S510的說明,不再贅述。數(shù)據(jù)產生控制器730可于接收到一個紋理磚的原始數(shù)據(jù)后,指示內存控制器210儲存原始數(shù)據(jù)至內存220中的區(qū)域221并輸出原始數(shù)據(jù)至壓縮器710,并且指示壓縮器710使用第一種算法來降低畫素間的關聯(lián)性,使得壓縮器710可針對原始數(shù)據(jù)執(zhí)行包含第一種算法的無損壓縮算法。壓縮器710將壓縮結果輸出至數(shù)據(jù)產生控制器730后,數(shù)據(jù)產生控制器730計算壓縮結果的長度,并且判斷是否超過目標長度。當壓縮結果的長度不超過目標長度時,數(shù)據(jù)產生控制器730通過輸出接口260輸出壓縮結果、文字旗標及減損程度旗標給其它電子組件,其中的文字旗標表示使用第一種算法來降低畫素間的關聯(lián)性,而減損程度旗標表示紋理磚的原始數(shù)據(jù)沒有經過縮減。當壓縮結果的長度超過目標長度時,數(shù)據(jù)縮減控制器730指示位圖產生器750,用以依據(jù)原始數(shù)據(jù)221產生如表1或表2所示的位圖770,并且儲存位圖770至內存220。位圖產生器750產生位圖770的細節(jié)可參考步驟S530的說明,不再贅述。在位圖770產生后,數(shù)據(jù)產生控制器730指示壓縮器710參考位圖770并使用第二種算法來降低畫素間的關聯(lián)性,使得壓縮器710可針對原始數(shù)據(jù)執(zhí)行包含第二種算法的無損壓縮算法。壓縮器710執(zhí)行無損壓縮算法的細節(jié)可參考步驟S510的說明。接著,壓縮器710將壓縮結果輸出至數(shù)據(jù)產生控制器730。數(shù)據(jù)產生控制器730計算壓縮結果的長度,并且判斷是否超過目標長度。當壓縮結果的長度不超過目標長度時,數(shù)據(jù)產生控制器730通過輸出接口260輸出壓縮結果、文字旗標、位圖及減損程度旗標給其它電子組件,其中的文字旗標表示使用第二種算法來降低畫素間的關聯(lián)性,而減損程度旗標表示紋理磚的原始數(shù)據(jù)沒有經過縮減。在一些實施例中,當壓縮器710使用第二種算法來降低畫素間的關聯(lián)性尚無法將壓縮結果的長度縮減至目標長度內時,數(shù)據(jù)產生控制器730可協(xié)調除法器241、解復用器243及內存控制器210執(zhí)行多層次的數(shù)據(jù)縮減,使得壓縮器710可對縮減數(shù)據(jù)執(zhí)行無損壓縮算法。除法器241、解復用器243、寄存器245及內存控制器210于多層次數(shù)據(jù)縮減的技術細節(jié)可參考圖2的說明,不再贅述。為了恢復如上所述的經不同算法來降低畫素間的關聯(lián)性以及經多層次數(shù)據(jù)縮減的紋理磚,圖8是依據(jù)本發(fā)明實施例的紋理磚解壓縮方法流程圖。此方法可執(zhí)行于紋理譯碼器。在接收一個壓縮結果及減損程度旗標后(步驟S310),依據(jù)減損程度旗標判斷紋理磚的原始數(shù)據(jù)是否強迫縮減至目標長度(步驟S320)。如果是(步驟S320中“是”的路徑),直接恢復壓縮結果至原始長度(步驟S351)及輸出恢復結果給3D繪圖流水線中的紋理操作(步驟S360)。步驟S310、S320、S351及S360的技術細節(jié)可參考圖3的說明,不再贅述。接著,取得文字旗標(S810),并且判斷編碼器是否使用第一種算法降低畫素間的關聯(lián)性(步驟S820)。若是(步驟S820中“是”的路徑),無損譯碼壓縮結果以及使用第一種算法恢復畫素間的關聯(lián)性(步驟S830)。否則(步驟S820中“否”的路徑),取得位圖(步驟S841),無損譯碼壓縮結果以及依據(jù)位圖使用第二種算法恢復畫素間的關聯(lián)性(步驟S843)。無損譯碼可使用適應性字典譯碼、一元譯碼、熵譯碼等。在步驟S830的一些實施例中,除了紋理磚的畫素(0,0)外,第一種算法可將每一個畫素的R值、G值及B值分別加上畫素(0,0)的R值、G值及B值。熟習此技藝人士可根據(jù)不同的設計需求使用不同的第一種算法,本發(fā)明并不因此受限。在步驟S841中,取得的位圖可如表1或表2所示。于步驟S843中,詳細來說,可依據(jù)位圖將紋理磚中的畫素分成二個或三個群組。接著,在一些實施例中,針對每一個群組,除最左上畫素外的每一個畫素的R值、G值及B值,分別加上最左上畫素的R值、G值及B值。在無損解碼及恢復畫素間的關聯(lián)性后(步驟S830或S843),依據(jù)減損程度旗標判斷接收到的壓縮結果是否經過數(shù)據(jù)縮減(步驟S340)。如果接收到的壓縮結果沒有經過數(shù)據(jù)縮減(步驟S340中“否”的路徑),輸出譯碼結果給3D繪圖流水線中的紋理操作(步驟S360)。如果接收到的壓縮結果經過數(shù)據(jù)縮減(步驟S340中“是”的路徑),依據(jù)減損程度旗標恢復解壓縮數(shù)據(jù)至原始長度(步驟S353)及輸出恢復結果給3D繪圖流水線中的紋理操作(步驟S360)。步驟S340、S353及S360的技術細節(jié)可參考圖3的說明,不再贅述。雖然圖2及圖7中包含了以上描述的組件,但不排除在不違反發(fā)明的精神下,使用更多其它的附加組件,以達成更佳的技術效果。此外,雖然圖1、3、5及8的方法流程圖采用特定的順序來執(zhí)行,但是在不違法發(fā)明精神的情況下,熟習此技藝人士可以在達到相同效果的前提下,修改這些步驟間的順序,所以,本發(fā)明并不局限于僅使用如上所述的順序。雖然本發(fā)明使用以上實施例進行說明,但需要注意的是,這些描述并非用以限縮本發(fā)明。相反地,此發(fā)明涵蓋了熟習此技藝人士顯而易見的修改與相似設置。所以,申請權利要求范圍須以最寬廣的方式解釋來包含所有顯而易見的修改與相似設置?!痉栒f明】S110~S190方法步驟;210內存控制器;220內存;221、223內存中的區(qū)域;230壓縮器;241減法器;243解復用器;245寄存器;250數(shù)據(jù)縮減控制器;260輸出接口;S310~S360方法步驟;410、430紋理磚;S510~S540方法步驟;611前景群組;613背景群組;631前景群組;633中間群組;635背景群組;710壓縮器;730數(shù)據(jù)產生控制器;750位圖產生器;770內存中的區(qū)域;S810~S843方法步驟。當前第1頁1 2 3