程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME手機開發中的透明圖片處理

J2ME手機開發中的透明圖片處理

編輯:關於JAVA

在開發J2ME手機程序的時候,尤其是在開發游戲的時候,透明圖片幾乎是一種必然的需求,但是在游戲開發中我們會采用Sprite精靈來做圖形元素的繪制,而這些圖片素材可能都是來自於資源中的文件,這些文件如果采用PNG等支持透明設置的格式的話,透明的處理就會被精靈類自動實現,不需要我們特別處理了。如果遇到一些特殊需求,比如某些圖片可能需要通過程序來繪制,或者開發者希望用程序來繪制,那麼這時候自己繪制的圖片如何被透明地繪制在Canvas中呢?

透明圖片的繪制在J2ME中不是通過Graphics的方法調用完成的,而是通過將Image圖片對象指定成透明圖片對象來完成的。在Image中有一個方法叫createRGBImage(int[] rgb,int width,int height,boolean processAlpha)。這個方法可以創建出一幅具有透明和半透明效果的圖片,當這樣的圖片被繪制在屏幕上的時候,會自動表現為透明或半透明色。但是這個方法產生的圖片有一個問題,就是這個圖片中的像素顏色是不可變的,也就是說這個對象的getGraphics()不能取得Graphics對象,也就不能通過程序自定義繪制圖片。而我們所需要的就是要通過程序來繪制圖片並且達到半透明效果。那麼怎麼辦呢?

我們這樣來處理,首先我們通過Image的createImage方法來創建一個可變圖片,然後繪制自定義的圖片數據內容。示例程序如下:  int w = 32;
int h = 24;
//創建可變的自定義圖片,指定寬度和高度
Image bufImg = Image.createImage(w, h);
Graphics g = bufImage.getGraphics();
g.setColor(0xFFFFFF);
//使用白色繪制背景
g.fillRect(0, 0, w, h);
//繪制需要的圖片內容
g.setColor(0xFF0000);
g.fillRect(10, 10, 20, 20);
  //繪制圖片完成,現在需要取得圖片中的數據內容。
//准備一個數組用來存放像素顏色
int [] imgData = new int[w * h];
//取得像素顏色
bufImg.getRGB(imgData, 0, w * h, 0, 0, w, h);

上面程序完成了對自定義圖片的像素顏色的提取,在J2ME中的Image是這樣規定的,如果這是一個不可變圖片,取得的每一個像素顏色是一個int類型的值,如果其高位是00,也就是顏色為0x00RRGGBB的時候,這個像素就是完全透明的,如果是0xAARRGGBB,其中AA表示透明度,這樣的顏色表示半透明,現在我們取得了自定義的可變圖片的像素顏色值,接下來,我們需要創建不可變圖片,並且要把白色的背景設置為完全透明的。  //將取得的保存在數組中的背景顏色的高位值設置為00
for(int i=0; i<imgData.length; i++) {
if(imgData[i] & 0x00FFFFFF == 0x00FFFFFF) {
imgData[i] = imgData[i] & 0x00FFFFFF;
}
}
  //創建不可變透明圖片, 其中最後一個參數表示透明。
Image immutableImg = Image.createRGBImage(imgData, w, h, true);

好了,到這裡一個透明圖片創建出來了,這個圖片被繪制到Canvas上將會是一幅背景完全透明的圖片。其實這樣我們可以對這個功能封裝一個方法,代碼如下:createAlphaImage(Image img, int alphaColor) {
int w = img.getWidth();
int h = img.getHeight();
int [] imgData = new int[w * h];
img.getRGB(imgData, 0, w * h, 0, 0, w, h);
for(int i=0; i<imgData.length; i++) {
if(imgData[i] & alphaColor == alphaColor) {
imgData[i] = imgData[i] & alphaColor;
}
}

方法參數說明如下:

img-是不透明的原圖片

alphaColor-是需要設為透明的像素顏色,格式為0x00RRGGBB.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved