專利名稱:一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖片處理技術(shù),特別涉及一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法。
背景技術(shù):
隨著圖片處理技術(shù)的不斷發(fā)展,目前各種圖片的展現(xiàn)方式變得越來越復(fù)雜,大量的嵌入式設(shè)備也開始支持圖形的硬件加速以達(dá)到更加絢麗的展現(xiàn)效果。DirectFB是一個輕量級的提供硬件圖形加速、輸入設(shè)備處理和抽象的圖形庫,它集成了支持半透明的視窗系統(tǒng)以及在Linux Framebuffer驅(qū)動之上的多層顯示。DirectFB 是專門為嵌入式系統(tǒng)而設(shè)計,其以最小的資源開銷來實(shí)現(xiàn)最高的硬件加速性能。緣于以上的優(yōu)點(diǎn),很多嵌入式芯片都提供對DirectFB的支持,軟件設(shè)計者可以使用DirectFB的API接口(應(yīng)用程序編程接口)編寫基于硬件加速的應(yīng)用程序,然而, DirectFB提供的API接口并不能滿足所有的應(yīng)用需求。在實(shí)際的應(yīng)用中,我們可能會遇到圖片的任意角度的旋轉(zhuǎn),而在目前的DirectFB 的標(biāo)準(zhǔn)API中,僅僅支持90、180、270、360度的旋轉(zhuǎn),對于90度旋轉(zhuǎn)是采用將圖片像素的行列倒置的方式,對于180度旋轉(zhuǎn)是采用將圖片像素的行上下倒置、列左右倒置的方式;對于 270度也是采用行列倒置的方式,不過倒置的方向與90度相反而已;對于360度旋轉(zhuǎn)就更簡單,只需將圖片的像素位置保持與原圖片一致即可;上述四種旋轉(zhuǎn)方式實(shí)現(xiàn)簡單,因此對于目前的DirectFB而言還足夠支持,然而, 如果想要將圖片旋轉(zhuǎn)任意角度(如27度),目前的DirectFB就無法支持該操作。這是由于任意角度的旋轉(zhuǎn)算法比較復(fù)雜首先我們不知道旋轉(zhuǎn)之后的圖片共有多少行,也不知道每行有多少個像素,更不知道每行的有效像素的起點(diǎn)是多少,終點(diǎn)又是多少,這些都需要通過復(fù)雜的計算而獲得。因此,對與任意角度的旋轉(zhuǎn),旋轉(zhuǎn)前后圖片的大小可能不同,也可能造成圖片像素數(shù)據(jù)的丟失,需要對每個像素進(jìn)行單獨(dú)處理。目前還沒有一種能夠?qū)崿F(xiàn)基于 DirectFB的圖片旋轉(zhuǎn)的方法。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提出一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法, 對于使用DirectFB圖形加速引擎的用戶,在利用API接口編寫應(yīng)用程序時,可實(shí)現(xiàn)對圖片的任意角度旋轉(zhuǎn)。本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案是一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,包括以下步驟a.解析圖片格式及像素點(diǎn)的存儲格式;b.根據(jù)當(dāng)前圖片的頂點(diǎn)坐標(biāo)值和旋轉(zhuǎn)矩陣計算旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值;c.創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū);d.利用DirectFB的Lock函數(shù)鎖定所述圖片數(shù)據(jù)緩沖區(qū);e.計算各像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)值;
f.根據(jù)計算得到的某個像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)值對該像素點(diǎn)進(jìn)行搬移;g.重復(fù)步驟f,直至完成圖片中的所有像素點(diǎn)的搬移。進(jìn)一步,步驟b中,還包括根據(jù)旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值計算旋轉(zhuǎn)后的圖片的大小。進(jìn)一步,步驟c中,根據(jù)旋轉(zhuǎn)后的圖片的格式和大小創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū)。本發(fā)明的有益效果是在原有DirectFB的基礎(chǔ)上,根據(jù)圖片格式和像素存儲原理,使用旋轉(zhuǎn)矩陣逐個計算圖片文件中像素點(diǎn)旋轉(zhuǎn)后的坐標(biāo)位置,進(jìn)行像素點(diǎn)數(shù)據(jù)在內(nèi)存中的搬移,從而實(shí)現(xiàn)圖片的任意旋轉(zhuǎn)操作,以達(dá)到用戶期望的旋轉(zhuǎn)效果。
圖1為本發(fā)明中的基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法流程圖。
具體實(shí)施例方式針對傳統(tǒng)技術(shù)中DirectFB引擎只能支持90、180、270、360度的旋轉(zhuǎn),不能實(shí)現(xiàn)任意角度旋轉(zhuǎn)的不足,本發(fā)明提出一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,在原有 DirectFB的基礎(chǔ)上,根據(jù)圖片格式和像素存儲原理,使用旋轉(zhuǎn)矩陣逐個計算圖片文件中像素點(diǎn)旋轉(zhuǎn)后的坐標(biāo)位置,進(jìn)行像素點(diǎn)數(shù)據(jù)在內(nèi)存中的搬移,從而實(shí)現(xiàn)圖片的任意旋轉(zhuǎn)操作, 以達(dá)到用戶期望的旋轉(zhuǎn)效果。參見圖1,本發(fā)明中的基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法包括以下步驟1.解析圖片格式及像素點(diǎn)的存儲格式不同的圖片具有不同的頭文件,其有效像素值的起始位置是不同的;而像素點(diǎn)的存儲格式也是多種多樣的,同一個像素點(diǎn)可以分別用8位、16位、32位等不同長度的內(nèi)存單元來表示,即使是8位的像素點(diǎn),也分為5、5、6和 5、6、5等不同的存儲格式,因此必須先分析圖片格式和像素點(diǎn)的存儲格式,才能保證讀出正確的像素值;2.根據(jù)當(dāng)前圖片的頂點(diǎn)坐標(biāo)值和旋轉(zhuǎn)矩陣計算旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值目前常見格式的圖片,如JPEG、BMP、PNG等,其邊界一定是一個由兩條水平邊和兩條垂直邊構(gòu)成的矩形區(qū)域,其頂點(diǎn)坐標(biāo)有4個,即四個角的坐標(biāo)值;當(dāng)圖片旋轉(zhuǎn)任意角度后,其原來的邊界可能不再水平和垂直,為了保證最終的圖片邊界是水平的和垂直的,所以必須再構(gòu)造一個矩形將旋轉(zhuǎn)后的圖片包含進(jìn)去,該矩形的4個頂點(diǎn)坐標(biāo)所圍成的矩形面積就是旋轉(zhuǎn)后的圖片所占有的區(qū)域,這個區(qū)域通常大于原來的圖片的矩形區(qū)域,而這個區(qū)域的具體大小值,需要通過計算旋轉(zhuǎn)后的圖片的新的頂點(diǎn)坐標(biāo)值而得到;3.創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū)由第2步獲得了旋轉(zhuǎn)后的圖片大小,就要根據(jù)該大小創(chuàng)建圖片緩沖區(qū)以存放該圖片的像素數(shù)據(jù)值;4.利用DirectFB的Lock函數(shù)鎖定所述圖片數(shù)據(jù)緩沖區(qū)對于圖片的旋轉(zhuǎn),采用的逐個像素處理的方法,在DirectFB中,如果想要對單個的像素操作,無論是讀還是寫,都需要首先鎖定整個的圖片緩沖區(qū),所以必須執(zhí)行Lock函數(shù),這是該算法的一個關(guān)鍵點(diǎn),只有執(zhí)行了 Lock操作之后,才能對單個像素點(diǎn)進(jìn)行處理,才能實(shí)現(xiàn)該算法的功能;5.計算各像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)值必須計算出旋轉(zhuǎn)后的像素的新坐標(biāo)值,才能將其放到旋轉(zhuǎn)后圖片緩沖區(qū)的正確位置;6.根據(jù)計算得到的某個像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)對該像素點(diǎn)進(jìn)行搬移對像素點(diǎn)的搬移操作即為將該像素點(diǎn)從原坐標(biāo)處搬移到旋轉(zhuǎn)后其對應(yīng)的新坐標(biāo)處;7.重復(fù)步驟6,直至完成圖片中的所有像素點(diǎn)的搬移完成了圖片的所有像素點(diǎn)的搬移,即為實(shí)現(xiàn)了該圖片的旋轉(zhuǎn)。
權(quán)利要求
1.一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,其特征在于,包括以下步驟a.解析圖片格式及像素點(diǎn)的存儲格式;b.根據(jù)當(dāng)前圖片的頂點(diǎn)坐標(biāo)值和旋轉(zhuǎn)矩陣計算旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值;c.創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū);d.利用DirectFB的Lock函數(shù)鎖定所述圖片數(shù)據(jù)緩沖區(qū);e.計算各像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)值;f.根據(jù)計算得到的某個像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)對該像素點(diǎn)進(jìn)行搬移;g.重復(fù)步驟f,直至完成圖片中的所有像素點(diǎn)的搬移。
2.如權(quán)利要求1所述的一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,其特征在于,步驟 b中,還包括根據(jù)旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值計算旋轉(zhuǎn)后的圖片的大小。
3.如權(quán)利要求2所述的一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,其特征在于,步驟 c中,根據(jù)旋轉(zhuǎn)后的圖片的格式和大小創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū)。
全文摘要
本發(fā)明涉及圖片處理技術(shù),其公開了一種基于DirectFB的圖片旋轉(zhuǎn)的實(shí)現(xiàn)方法,對于使用DirectFB圖形加速引擎的用戶,在利用API接口編寫應(yīng)用程序時,可實(shí)現(xiàn)對圖片的任意角度旋轉(zhuǎn)。其技術(shù)方案的要點(diǎn)包括步驟a.解析圖片格式及像素點(diǎn)的存儲格式;b.根據(jù)當(dāng)前圖片的頂點(diǎn)坐標(biāo)值和旋轉(zhuǎn)矩陣計算旋轉(zhuǎn)后的圖片的頂點(diǎn)坐標(biāo)值;c.創(chuàng)建旋轉(zhuǎn)后的圖片數(shù)據(jù)緩沖區(qū);d.利用DirectFB的Lock函數(shù)鎖定所述圖片數(shù)據(jù)緩沖區(qū);e.計算各像素點(diǎn)在旋轉(zhuǎn)前后的坐標(biāo)值的變化;f.根據(jù)計算得到的某個像素點(diǎn)在旋轉(zhuǎn)后的新坐標(biāo)對該像素點(diǎn)進(jìn)行搬移;g.重復(fù)步驟f,直至完成圖片中的所有像素點(diǎn)的搬移。本發(fā)明適用于使用DirectFB圖形加速引擎的用戶,在利用API接口編寫應(yīng)用程序時需要對圖片進(jìn)行任意旋轉(zhuǎn)操作。
文檔編號G06F9/44GK102446344SQ20111027502
公開日2012年5月9日 申請日期2011年9月16日 優(yōu)先權(quán)日2011年9月16日
發(fā)明者李宗海 申請人:四川長虹電器股份有限公司