在J2MEMIDP中實(shí)現(xiàn)圖像旋轉(zhuǎn)_第1頁(yè)
在J2MEMIDP中實(shí)現(xiàn)圖像旋轉(zhuǎn)_第2頁(yè)
在J2MEMIDP中實(shí)現(xiàn)圖像旋轉(zhuǎn)_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在J2ME/MIDP中實(shí)現(xiàn)圖像旋轉(zhuǎn)    摘  要  圖形圖像的旋轉(zhuǎn)在移動(dòng)應(yīng)用程序開(kāi)發(fā),特別是游戲開(kāi)發(fā)過(guò)程中有著現(xiàn)實(shí)的需求。但J2ME對(duì)此提供的支持卻十分有限,如MIDP2.0僅支持圖像成90度整數(shù)倍的旋轉(zhuǎn)。針對(duì)這種情況, 本文提出了一種實(shí)現(xiàn)圖像任意角度旋轉(zhuǎn)的方案并提供了算法實(shí)現(xiàn)。然后對(duì)算法的應(yīng)用問(wèn)題進(jìn)行了探討,分析了算法的局限性。最后介紹了在j2me中實(shí)現(xiàn)旋轉(zhuǎn)的另外兩種參考性方案。       關(guān)鍵詞  J2ME;CLDC;MIDP;Sprite;圖像旋轉(zhuǎn) 1 &

2、#160;   J2ME概述       J2ME是標(biāo)準(zhǔn)版java(J2SE)面向手機(jī)、PDA等各類移動(dòng)和嵌入式設(shè)備的縮減版本,是一種獲得眾多廠商的支持和廣泛使用的移動(dòng)設(shè)備開(kāi)發(fā)平臺(tái)。圖一展示了J2ME技術(shù)的體系結(jié)構(gòu)。它分為三層:虛擬機(jī)層,配置層,和簡(jiǎn)表層。       配置層(Configuration)通過(guò)對(duì)功能的描述,把千差萬(wàn)別的嵌入式設(shè)備進(jìn)行了功能的說(shuō)明和分類。它把運(yùn)算功能有限、內(nèi)存較小、電力有限的設(shè)備,定義在CLDC(有限連接設(shè)備配置)規(guī)范中,這類設(shè)備有PDA 、手機(jī)

3、等;把運(yùn)算能力相對(duì)較佳、內(nèi)存相對(duì)較大、電力供應(yīng)比較充足的設(shè)備,定義在CDC(連接設(shè)備配置)規(guī)范之中,這類設(shè)備有電冰箱、機(jī)頂盒、車載計(jì)算設(shè)備等。 虛擬機(jī)層(Virtual Machine)基于宿主操作系統(tǒng),按照某一種配置,實(shí)現(xiàn)了Java虛擬機(jī)。CDC配置對(duì)應(yīng)的虛擬機(jī)叫CVM,CLDC對(duì)應(yīng)的虛擬機(jī)叫做KVM。       簡(jiǎn)表層(Profile)建立在配置層之上,提供了面向用戶的更高層次的功能,如用戶接口,網(wǎng)絡(luò),數(shù)據(jù)存儲(chǔ)等?;A(chǔ)規(guī)范(Foundation Profile)和個(gè)人規(guī)范(Personal Profile)是CDC之上的兩個(gè)重要的規(guī)范,移

4、動(dòng)信息設(shè)備規(guī)范(MIDP)和PDA規(guī)范(PDAP)是CLDC之上的兩個(gè)重要的規(guī)范。當(dāng)前,無(wú)線應(yīng)用程序的開(kāi)發(fā)主要是在MIDP之上進(jìn)行的。       配置層和簡(jiǎn)表層共同構(gòu)成了J2ME的運(yùn)行環(huán)境。如CLDC/MIDP架構(gòu)構(gòu)筑了手機(jī)應(yīng)用程序的開(kāi)發(fā)和運(yùn)行環(huán)境。本文所實(shí)現(xiàn)的圖像旋轉(zhuǎn)算法便是基于這種架構(gòu)的。 e     圖一 J2ME 體系結(jié)構(gòu) 需要注意的是,這些規(guī)范也是在不斷發(fā)展的。如早期很多的設(shè)備的計(jì)算能力非常有限,CLDC1.0就只支持整型數(shù)值。后來(lái)數(shù)隨著設(shè)備運(yùn)算能力的提高,CLDC1.0發(fā)展到CLD

5、C1.1,就加如了對(duì)浮點(diǎn)運(yùn)算的支持。對(duì)MIDP規(guī)范也一樣,從1.0發(fā)展到2.0,它通過(guò)擴(kuò)充類和接口的功能,加強(qiáng)了對(duì)游戲開(kāi)發(fā)的支持,增加了圖像處理功能(旋轉(zhuǎn)要用到),增強(qiáng)了對(duì)網(wǎng)絡(luò)功能的支持,如串口、套接字、https等。 2     2D旋轉(zhuǎn)的數(shù)據(jù)基礎(chǔ)       考慮笛卡兒直角坐標(biāo)系中單個(gè)點(diǎn)旋轉(zhuǎn)的情況。如圖二示,這里點(diǎn)P(x,y)到原點(diǎn)O繞O點(diǎn)逆時(shí)針旋轉(zhuǎn)角度后到點(diǎn)P(x,y)。由三角函數(shù)的幾何意義,有x  = r*cos ,y = r*si n 和x = r*cos( +) , y = r*si

6、n( + ),推出: x = x * cos y * sin y = y * cos + x * sin       當(dāng)把旋轉(zhuǎn)點(diǎn)一般化為Q(x0,y0),得到: x = x0 + (x - x0) cos - (y - y0) sin y = y0 + (y - y0) cos + (x - x0) sin       在開(kāi)發(fā)時(shí),我們使用設(shè)備坐標(biāo)系,它以屏幕的左上角為坐標(biāo)原點(diǎn),y軸方向向下。此時(shí),我們不妨視為饒旋轉(zhuǎn)點(diǎn)順時(shí)針旋轉(zhuǎn)的角度,這樣,上面的公式依然成立。   

7、 圖二 2D點(diǎn)的旋轉(zhuǎn) 3     一般圖像的旋轉(zhuǎn)算法 3.1   算法思想       為實(shí)現(xiàn)整個(gè)圖像的旋轉(zhuǎn),我們首先獲取源圖像每個(gè)點(diǎn)的像素值。然后根據(jù)旋轉(zhuǎn)點(diǎn)和角度的大小計(jì)算出新圖像的大小。再逐點(diǎn)計(jì)算源圖像中每個(gè)點(diǎn)經(jīng)旋轉(zhuǎn)后在新圖像中對(duì)應(yīng)點(diǎn)的坐標(biāo),并把相應(yīng)的像素值賦給它。       在圖三中,陰影部分為源圖像,O為旋轉(zhuǎn)點(diǎn),P、Q分別為旋轉(zhuǎn)前后圖像左上角的點(diǎn),cx,cy為O相對(duì)于源圖像左上角P點(diǎn)的坐標(biāo)值。   

8、;    這里我們以O(shè)為圓心,以O(shè)距圖像4個(gè)頂點(diǎn)的距離的最大值作為半徑dr畫圓,這樣圖像無(wú)論以任何角度旋轉(zhuǎn)都不會(huì)超出這個(gè)圓的范圍。于是,我們就以該圓為畫布繪制旋轉(zhuǎn)所得新圖像。由于實(shí)際中圖像是用矩形表示的,于是我們生成和圓的外切正方形(圖中虛線部分)等大小的新圖像。 對(duì)源圖像中任一點(diǎn)(i,j),根據(jù)上面的公式,不難計(jì)算出旋轉(zhuǎn)度在新圖像中的位置,即相對(duì)于Q點(diǎn)的位置(destX , destY): destX = dr + (i - cx) *cos(radian) - (j - cy)*sin(radian);     destY = d

9、r + (j - cy) *cos(radian) + (i - cx)*sin(radian);        計(jì)算出這個(gè)位置后,把該點(diǎn)的像素值賦值到這個(gè)位置,如此對(duì)每個(gè)點(diǎn)進(jìn)行這種變換,即可實(shí)現(xiàn)整個(gè)圖像的旋轉(zhuǎn)。       旋轉(zhuǎn)后的圖像較大,在實(shí)際繪制時(shí)需要做位置調(diào)整,不難看出,Q點(diǎn)相對(duì)于P點(diǎn)的偏移量為(cx-dr , cy-dr)。即假設(shè)源圖像的屏幕位置為(a , b),則旋轉(zhuǎn)后的圖像位置應(yīng)該為( (a + cx dr) , (b + cy dr) )。

10、0;   圖三 旋轉(zhuǎn)算法示意圖 3.2  在J2ME中的算法實(shí)現(xiàn)        我們將上面的思想具體化,得到算法的流程圖(見(jiàn)圖四示)    圖四 算法流程圖       在MIDP2.0中,Image類提供了兩個(gè)方法:getRGB()和createRGBImage(),分別完成獲取圖像象素信息和通過(guò)像素?cái)?shù)組創(chuàng)建圖像的功能。借助于這兩個(gè)方法,結(jié)合上面的流程圖,我們得到實(shí)現(xiàn)圖像旋轉(zhuǎn)算法的代碼,如下面所示。 /*

11、 *param imgSource  源圖像 *param cx   旋轉(zhuǎn)點(diǎn)相對(duì)于源圖像坐上角橫坐標(biāo) *param cy   旋轉(zhuǎn)點(diǎn)相對(duì)于源圖像坐上角縱坐標(biāo) *param theta 圖像逆時(shí)針旋轉(zhuǎn)的角度 *param dd 含2個(gè)元素的整形數(shù)組,存放新圖像相對(duì)源圖像沿x軸和y軸的位置偏移量 *return 旋轉(zhuǎn)后的圖像 */ public Image rotate(Image imgSource, int cx, int cy, double theta, int dd)       

12、;  if (Math.abs(theta % 360) < 0.1)   return imgSource; /角度很小時(shí)直接返回           int w1 = imgSource.getWidth();  /原始圖像的高度和寬度 int h1 = imgSource.getHeight();         int srcMap = new intw1 * h1;   

13、      imgSource.getRGB(srcMap, 0, w1, 0, 0, w1, h1);     /獲取原始圖像的像素信息         int dx = cx > w1 / 2 ? cx : w1 - cx;   /計(jì)算旋轉(zhuǎn)半徑         int dy = cy > h1 / 2 ? cy : h1 - cy;  

14、60;      double dr = Math.sqrt(dx * dx + dy * dy);         int wh2 = (int) (2 * dr + 1); /旋轉(zhuǎn)后新圖像為正方形,其邊長(zhǎng)+1是為了防止數(shù)組越界         int destMap = new intwh2 * wh2; /存放新圖像象素的數(shù)組       &

15、#160; double destX, destY; double radian = theta * Math.PI / 180; /計(jì)算角度計(jì)算對(duì)應(yīng)的弧度值         for (int i = 0; i < w1; i+)             for (int j = 0; j < h1; j+)         

16、        if (srcMapj * w1 + i >> 24 != 0)     /對(duì)非透明點(diǎn)才進(jìn)行處理                     / 得到當(dāng)前點(diǎn)經(jīng)旋轉(zhuǎn)后相對(duì)于新圖像左上角的坐標(biāo)         

17、            destX = dr + (i - cx) * Math.cos(radian) + (j - cy)* Math.sin(radian);                     destY = dr + (j - cy) * Math.cos(radian) - (i -

18、 cx)* Math.sin(radian);                                     /從源圖像中往新圖像中填充像素         &

19、#160;           destMap(int) destY * wh2 + (int) destX = srcMapj * w1 + i;                                

20、;                   dd0 = cx-dr;        /返回位置偏移分量   3解決問(wèn)題的幾點(diǎn)建議 3.1會(huì)計(jì)法規(guī)制定的原則應(yīng)體現(xiàn)中國(guó)特色并與國(guó)際慣例接軌 我國(guó)在制定會(huì)計(jì)準(zhǔn)則的過(guò)程中,一方面應(yīng)充分考慮國(guó)情,使會(huì)計(jì)準(zhǔn)則盡量能為我國(guó)企業(yè)的良性發(fā)展服務(wù),并要加快無(wú)形資產(chǎn)、人力資源、國(guó)際業(yè)務(wù)等方面的具體會(huì)計(jì)準(zhǔn)則的研究步伐。另一方面,我國(guó)已經(jīng)加入WTO,WTO要求各個(gè)成員的國(guó)內(nèi)立法要與相關(guān)規(guī)則和成員國(guó)自己的承諾相一致,當(dāng)前幾乎所有的國(guó)家都將WTO規(guī)則轉(zhuǎn)換為國(guó)內(nèi)法律。因此,這就要求我們對(duì)原有的會(huì)計(jì)法規(guī)進(jìn)行調(diào)整,予以完善。并且要在體現(xiàn)我國(guó)特色的基礎(chǔ)上,借鑒和吸收國(guó)際會(huì)計(jì)準(zhǔn)則中的有用成分,使我國(guó)會(huì)計(jì)準(zhǔn)則與國(guó)際會(huì)計(jì)準(zhǔn)則協(xié)調(diào)起來(lái),具體來(lái)講

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論