2011-05-10 48 views
1

我正在寫一個簡單的J2ME遊戲,它使用帶有8位Alpha通道的PNG圖像。問題:並非所有硬件都支持完整的Alpha透明渲染。然而,由於我的遊戲本質上是非常靜態的(一開始,根據當前的屏幕大小,「精靈」被放置在背景圖像上,這就是它),我認爲可以將這些透明圖像直接預渲染到遊戲初始化期間的背景以及稍後在遊戲中使用。我不能在Photoshop中預渲染他們,因爲他們的位置並未提前知道。如何在J2ME中從PNG中讀取原始alpha通道?

但是,似乎沒有辦法在不支持半透明的設備上讀取原始Alpha通道,因爲它在PNG加載期間被重新採樣。有一些圖書館可以幫助嗎?或者是分開存儲阿爾法通道(例如作爲單獨的8位PNG圖像)並手動應用它們?

謝謝!

回答

1

PNG圖片也有透明度的支持,如果你想創建透明的圖像,然後您與Alpha通道和流程阿爾法陪讀RGB數據

Image transPNG=Image.createImage("/trans.png"); //load the tranparent image 
int rgbData[]; 
transPNG.getRGB(rgbData, 0,transPNG.getWidth(), 0, 0,transPNG.getWidth(), transPNG.getHeight()); 
Image tranparentImage=Image.createRGBImage(rgbData, width, height, true); //process alpha 
transPNG=null; 

上面的代碼顯示瞭如何創建透明圖像和使用。

+0

感謝您的回覆。但是,getRGB()狀態的文檔「在不支持Alpha混合的設備上,不透明像素的Alpha值爲0xFF,所有其他像素的Alpha值爲0x00。」因此,可以修改getRGB()生成的alpha值,以適應平臺支持的半透明度級別(Display.numAlphaLevels())。我想知道是否有一種方法可以以獨立於設備的方式讀取alpha通道,最好是以一種簡單的方式(不知道是否有用於J2ME的第三方PNG庫)。 – lorimer 2011-05-11 15:41:56

+0

現在,每個設備都支持透明的PNG .. – Ashok 2011-06-15 06:13:52

0

我不能承諾這會有所幫助,但您可以嘗試使用Java util的標準方法來讀取alpha通道。

BufferedImage image = ImageIO.read(new File(name)); 

int[] alpha = new int[1]; //containg alpha-value for one pixel. 
image.getAlphaRaster().getPixel(x, y, alpha); 

System.out.println(alpha[0]); //gives the alpha value for x,y