0

我有一个使用创建的 BufferedImage

new BufferedImage(wid,hgt,BufferedImage.TYPE_INT_ARGB);

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

谁能指出我如何使用CDC 1.0 和Personal Profile 1.1 构建 alpha 通道支持图像?


编辑:现在我已经创建了处理 NoSuchMethodError(等)的后备代码,然后简单地使用 GraphicsConfiguration.createCompatibleImage(int,int) 创建一个图像。可能是这样创建了一个 alpha 混合图像,但由于其他优先事项,我还需要几周的时间才能专门测试它(在手持设备上进行测试不是我的直接责任,所以它不在我的控制范围内)。

如果我找到更好的答案,我会将其发布为对此的答案;同时,如果其他人超过我,请放心,如果它有效,我会接受你的答案,并且在可预见的未来我会对答案感兴趣(我预计在 2-5 年内仍需要答案) .

4

1 回答 1

2

Image 类 (javax.microedition.lcdui.Image ) 包含一个 getRGB(...) 方法,该方法将 Image 解析为图像中每个像素的 RGB+Alpha 值数组。一旦您拥有该格式的图像,在您对图像分层之前,很容易调整 alpha 值以增加其透明度。这确实是我见过的在 J2ME 中编辑图像透明度的唯一动态方式。

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

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

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

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(...) 方法,它将图像数据的字节数组作为参数,可用于从修改后的像素数据数组中创建新图像。

同样有用的是,索尼爱立信的开发者网站也有一个包含示例代码的教程,名为“ MIDP 2.0 中的淡入和淡出图像”,它解释了“如何更改图像的 alpha 值以使其看起来混合”,这本质上是 alpha 混合。

于 2010-02-13T02:02:04.297 回答