2011-05-10 74 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