如何使用J2ME(CDC / PP 1.1)创建alphablending BufferedImage

时间:2009-08-05 23:41:45

标签: java image java-me alphablending j9

我有一个使用

创建的BufferedImage
new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB);

我使用多个其他图像组装壁纸。它在Jave SE中运行良好,但当我尝试在J9 CDC / PP平台上运行代码时,我发现Personal Profile BufferedImage没有构造函数!

有人能指出我如何使用 CDC 1.0和个人资料 1.1构建支持Alpha通道的图像吗?


编辑:现在我创建了处理NoSuchMethodError(等等)的后备代码,然后使用GraphicsConfiguration.createCompatibleImage(int,int)创建一个图像。 可能可以创建一个alpha混合图像,但是由于其他优先级,我可以在几周之前对其进行专门测试(手持设备上的测试不是我的直接责任,所以它不在我的手。)

如果我找到更好的答案,我会将其作为答案发布;与此同时,如果有人打败我,请放心,如果有效,我会接受你的回答,在可预见的将来我会对你的答案感兴趣(我希望在2 - 5年内仍需要答案)

1 个答案:

答案 0 :(得分:2)

Image类(javax.microedition.lcdui.Image )包含一个方法getRGB(...),它将Image解析为图像中每个像素的RGB + Alpha值数组。获得该格式的图像后,在分层图像之前,可以轻松调整alpha值以增加其透明度。这实际上是我见过在J2ME中编辑图像透明度的唯一动态方式。

要从rgba数组中获取alpha(透明度)值,你必须像这样使用位移:

int origAlpha = (rgba[j] >> 24);

然后将alpha(透明度)值更改为不同的值(不更改该像素的颜色),您可以使用bitshifting插入不同的透明度级别。

int newAlpha = 0x33; // or use whatever 0-255 value you want, with 255=opaque, 0=transparent
rgba[j] = (rgba[j] & 0x00ffffff);
rgba[j] = (rgba[j] | (newAlpha << 24));

然后在Image中有一个createImage(...)方法,它将一个图像数据的字节数组作为参数,可以用来从修改后的像素数据数组中创建一个新图像。

也很有帮助,SonyEricsson的开发者网站也有一个名为“Fade in and out images in MIDP 2.0”的示例代码教程,其中解释了“如何更改图像的alpha值以使其显示为混合”,这实质上是alpha混合。 / p>