j2me中的畫素渲染

2021-04-20 02:13:47 字數 2927 閱讀 9659

以前看到過別人寫的一些關於在

j2me

中使用畫素渲染的方法,不過都是理論論述,而且很多人都質疑

2.0中的

drawrgb

的效率,自己也有相同的想法,但是畫素渲染所帶來的巨大好處還是讓人動心的。所以這次下了決心,專門抽了時間來實現了一下,就是你在下面所看到的一些資料。

機型占用記憶體(1)

臨界渲染次數(1)

占用記憶體(2)

臨界渲染次數(2)

se k510

0.5x

120+

1.5x

800+

se k700

0.5x

120+ 2x

800+

nokia 7610

0.5x

150+ 2x

800+

moto v600

0.5x

<10 2x

<10

moto l7

0.5x

<10 2x

<10

moto e680

0.5x

400+ 2x

1000+

*占用記憶體是與同面積(長

*寬)的

image

物件所佔記憶體的比較,只是估值,僅供參考

*臨界次數以

10次為乙個步長累加,在乙個週期(

50ms

)內直到出現人為感覺的延遲的渲染次數,也是估值,僅供參考

這次的實驗物件採用了乙個

png分解成為乙個

120長度的

int型陣列的調色盤檔案(

plt),和寬

*高長度的

byte

型的陣列作為資料來源(

raw),這樣產生的資料檔案經過

zip壓縮與

png原始檔差不多大小(

1137/1159

),但是經過適當的加密運算,可以有較好的保護資源。

方法1

採用迴圈賦值的方法,把影象直接渲染到螢幕大小的

int型陣列裡。

方法2

採用arraycopy

的方法,有效的減少了迴圈的次數,但是因為

arraycopy

的關係,無法直接使用

byte

型的源資料,需要轉化為

int型的資料,所以增加了記憶體資源的占用。

結論和感想

1.drawrgb

絕對不是過程中的瓶頸所在,以前產生誤解的原因是因為和其他繪製方法的混用,總之還是繪製次數決定速度。

2.螢幕大小與渲染速度並沒有很顯著的關係,但是在實際應用中有一定的聯絡,螢幕越大需要渲染越多的。

3.渲染速度與機器的主頻或者說陣列操作的效能直接相關,在相同的頻率下,渲染次數與渲染面積大小的乘積是構成影響渲染速度的最重要因素。

4.moto

的非智慧型機(

v600/e398/l6/l7

)實在是太次了,至少在陣列操作的速度上實在是讓人汗顏,而且

arraycopy

的實現也非常的差勁,幾乎對效能沒有改善,在

60+就進入了假死狀態(執行緒死鎖)。

5.根據資料結合經驗來看(實際應用),方法一,在

nokia和se

的效能幾乎和常規的

drawimage

方法持平,但是記憶體資源的占用方面有很大的優勢。方法二,在

nokia

上,與乙個現有的專案比較,效能強於常規方法非常多。在

se上有一定的優勢,但是沒有太多的實際意義。

e680

也是相似的情況。

6.綜上所述,似乎畫素渲染的意義不是非常明顯,但是不要忘了我們嘗試畫素渲染的目的,對,就是更自由更多變(透明,旋轉,換色等特效),既然如此,那麼我們在

nokia和se

還有moto

的智慧型機上面達到了我們的目的。

7.最後,我們的方法還有改進的餘地,比如改進第二種方法。

最後的最後,

2段**,

test

是渲染方法1,

test2

是分離png

的方法。如果有人能提供更好的方法,或者對**進行優化的話感激不盡。

問題1:我使用畫素級的渲染只是看中這個方法帶來的一些好處,比如一張的

顏色漸變

,如果用

drawimage

肯定需要一打的漸變層次的。你如果是指把畫素用

creatrgbimage

再重組回

inmutable

的image

物件,我覺得多此一舉了。問題2

:當然不需要解壓縮,我指的是打成

jar以後,在包內的檔案大小和

png差不多。因為

png的

idat

也是經過壓縮的。如果你是用

setclip

或者drawregion

來實現的話,在要求很高的表現力的情況下幾乎會讓你崩潰的,重繪的次數是海量級的。

幾個問題:1)

為什麼test2

不直接使用

drawimage

,而要把

imagedata

讀到陣列裡呢?2)

「資料檔案經過

zip壓縮

」,那麼在

手機上是不是還需要解壓縮呢?這部分的

memory

和時間開銷是否合算呢?

個人認為

png是一種很簡單使用的格式,提供了

zlib

的壓縮模式(關鍵是手機上提供了

zlib

解壓縮),如果要做象素級的操作也很方便。而且手機**商,一般都會對

png的渲染做優化。

一家之言。

哦,完全沒看懂這個問題,自定義格式其實對減少大小也很有幫助的。但是壓縮的話,jar本身就是壓縮的,我也提到了。分離調色盤的原因主要還是要換調色盤容易一些。

J2ME中的分而治之

這兩天在研究j2me中setclip的用法.兩張切換時,如果是新的從內向外以矩形顯示,可以使用一次setclip設定繪製的矩形區域.但是,現在反回來,從外向內,以矩形框顯示,但是j2me裡面沒有這樣的方法,怎麼辦?有了,咱們給他來個分而治之,一次setclip不行,咱們可以分多次嘛.就現在的情況,可...

j2me中的Display介紹

好好看一下j2me 的api,其中裡面乙個很簡單的列子就是display類,常用的只有display.getdisplay midlet 和setcurrent 不過display的功能是十分的強大。display總結起來有兩個作用 1,獲取螢幕的屬性。色彩,支援的顏色數量資訊。iscolor 判斷...

J2ME 關於移動的主頁推送對J2ME程式的影響

中國移動於5月17日推出費用提示頁面,其實早在5月15日測試j2me程式的時候就發現已經有頁面推送了。5月15日早上照常測試我的j2me聯網程式發現在模擬器一切正常,但是到了真機上卻得不到正確的資料,後來發現是第一次鏈結得到的資料流正是移動推送的頁面資料。經過試驗,其實得到第乙個頁面不用管它,繼續重...