MIDP2.0中供給了對圖片的象素級的處理,利用這一點,我們可以對圖片進行相干的處理,比如半透明,把彩色圖片處理成灰度圖片,以及圖片變色後果都可以在J2ME裡很方便地實現。
在進行這些把持之前,我們必需先懂得Java中的一些位把持符:
<<,>>,&,|,重要是這幾個把持符,下面我們就開端我們的把持
1、半透明處理
在PNG裡每個象素是一個ARBG格局,是一個8位的十六進制的數字,比如0xff121212,這個東西描寫了圖片的一個象素,我們可以通過 Image類中的getRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height) 方法獲得一個rgbData,這個rgbData就保留了圖片所對應的象素信息,取出象素信息之後我們需要對其進行透明後果的處理,透明後果的值是保留在 8位中的最高2位,你可以把這個象素值轉換成16進制輸出,一般情況下最高2位應當都是為FF,也就是不透明,我們現在需要把這個FF改成一個比他小的值,那麼我們的圖片就透明了,最高位為00的時候圖片就全透明了。
實在8位16進制對應了32位的2進制,那麼我們可以通過下面的方法取出他的最高2位:
A = Argb>>24//把這個數向右移動24位,那麼剩下的8位就是我們要的最高位了
修正之後我們再通過下面的方法可以把他存回往 Argb = a<<24 |( argb & 0x00FFFFFF);
那麼我們通過循環把這個圖片的所有象素信息都轉變之後,在用轉變的象素信息來結構一個圖片,或者這個通過我們的Graphics 下面的drawRGB方法直接畫出來的就是一個半透明後果的圖片了,你可以在畫這個圖片之前先畫一個其他的圖片,這樣你就可以很明顯地看到後果了:
import Java.io.IOException;
import Javax.microedition.lcdui.Canvas;
import Javax.microedition.lcdui.Graphics;
import Javax.microedition.lcdui.Image;
/**
* @author 劉軍
* @version 1.0
*/
public class TCanvas extends Canvas {
Image image;//要處理的圖片
int argb[];
public TCanvas() {
super();
try {
image = Image.createImage("/test.png");//導進圖片
} catch (IOException e) {
e.printStackTrace();
}
argb = new int[image.getWidth()*image.getHeight()];
image.getRGB(argb,0,image.getWidth(),0,0,image.getWidth(),image.getHeight());//獲得圖片的ARGB值
int temp;
int a= 100;//把象素的透明度都設置為100
for(int i=0;i<argb.length;i++)
{
argb[i]=(a<<24) | (argb[i] & 0x00FFFFFF);// 修正最高2位的值
}
}
protected void paint(Graphics g) {
g.drawImage(image,0,0,Graphics.TOP|Graphics.LEFT);
g.drawRGB(argb,0,image.getWidth(),0,100,image.getWidth(),image.getHeight(),true);// 畫象素數組
}
}