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" />