[譯]用MIDP 2.0 實現圖片漸入漸出效果

May 2004

用MIDP 2.0 實現圖片漸入漸出效果

原文出處:http://developer.sonyericsson.com/site/global/techsupport/tipstrickscode/java/p_java_0501.jsp

 

譯者: clapton_xpAThotmailDOTcom
2004 年 8 月


 

本文介紹如何通過改變圖像的alpha值使其呈現漸變效果,文後附有示例MIDlet代碼。

MIDP 2.0 中Image類有一個新的方法, getRGB(...) ,它可以將image的alpha以及RGB值轉換爲一個int數組。 我們可以用該方法以及獲得的數組改變圖片的alpha值。

 

j2me 裏的int是4 bytes的,image中的每個像素以ARGB值的方式描述,每個值可以爲0-255。 如果 alpha 值爲 0, 對應的像素就爲透明,反之如果alpha 值爲255, 像素爲完全不透明。

 

從int數組中獲得每個像素的顏色可以使用AND '&' 操作符。我們可以先得到像素的顏色,然後再附加上我們想要得到的漸變效果。

 

FF = 11111111 = 255
0xFFFFFFFF - Alpha = 255, Red =255 Green = 255, Blue = 255
(0xFFFFFFFF & 0x00FFFFFF) = 0x00FFFFFF

 

上面的代碼我們可以得到int數組的RGB顏色值,alpha值爲0。

 

現在我們有了alpha值爲0的RGB顏色值,我們只需在其上附加新的alpha值。

 

如果我們想把顏色的alpha值設爲255,我們需要使用左移操作符。

 

操作方法:
(00000000 00000000 00000000 11111111) to
(11111111 00000000 00000000 00000000)
use the shift left '<<' operator.
(0xFF << 24) = 0xFF000000.

 

clapton_xpAThotmailDOTcom

 

用這種方法我們可以改變顏色的alpha值或者實現遮蓋效果。

用image的getRGB(...) 方法獲得圖像的所有像素的ARGB值,並放入一個int數組。
用下面的blend方法改變數組中每個值(像素)的alpha值。
用image的 createRGBImage(...) 方法從我們修改過的int數組創建一個新的image。
下面是使用 getRGB 和 createRGBImage 方法的例子:

 

    public static void blend(int[] raw, int alphaValue){
        int len = raw.length;
       
        // Start loop through all the pixels in the image.
        for(int i=0; i            int a = 0;
            int color = (raw[i] & 0x00FFFFFF); // get the color
of the pixel.
            a = alphaValue;     // set the alpha value we want
to use 0-255.

            a = (a<<24);    // left shift the alpha value 24 bits.
            // if color = 00000000 11111111 11111111 00000000
(0xFFFF00 = Yellow)
            // and alpha= 01111111 00000000 00000000 00000000
            // then c+a = 01111111 11111111 11111111 00000000
            // and the pixel will be blended.
            color += a;
            raw[i] = color;
        }
    }

 

 

下載源代碼>><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

發佈了35 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章