java - JAI 将 Alpha channel 添加到 RenderedImage

标签 java jai argb

我有两个 RenderedImages。我想对这两个图像进行叠加操作,因此它们需要匹配数据类型和波段数。
我遇到的问题是,一张图片有 3 个波段 (RGB),第二张图片有 4 个波段 (ARGB)。

我的问题是如何将 Alpha channel 添加到第一张图像以便进行叠加操作

编辑
好的,我找到了一种方法,可以为第一张图像添加 Alpha channel 。下面是代码。我只是创建了一个单一的带状常量图像并将其与我的第一张图像合并。

ParameterBlock pb = new ParameterBlock();
pb.add(new Float(finalImage.getWidth())).add(new Float(finalImage.getHeight()));
pb.add(new Byte[] {new Byte((byte)0xFF)});
RenderedImage alpha = JAI.create("constant", pb);

finalImage = BandMergeDescriptor.create(finalImage, alpha, null);

我现在遇到的问题是,每次添加叠加层时,图像都会改变颜色。所有的颜色都变成红色或粉红色的细微差别。当我添加第二个叠加层时,图像再次变得正常,但第一个叠加层改变了颜色。所有黑色区域都变成白色。

叠加层的背景也不透明。它是灰色的。

下面是图片示例,您可以看到颜色是如何变化的:

original Picture

after adding the first overlay

after adding the second overlay

如您所见,图片和叠加层改变了颜色,并且叠加层的背景不透明。

你能帮我解决这个问题,让图像始终正确显示吗?谢谢!

最佳答案

你可以尝试新建一个ARGB-model的BufferedImage,将不透明的背景图片绘制到这个新的BufferedImage中即可。然后你有一个带 alpha channel 的 BufferedImage(尽管所有像素都是不透明的),所以 Composition 应该可以正常工作。

关于java - JAI 将 Alpha channel 添加到 RenderedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973879/

相关文章:

java - Android 测试 - 无法设置正确的配置

java - 将文件从本地共享复制到 Linux 本地驱动器

java - 无法启用 JNI 调试器

java - 如何使用ColorQuantizerDescriptor?

java - 值被插入到数据库中,但它们不应该

Java/JAI - 保存灰度图像

java - 使用 Java 进行 Android 图像编辑/变形?

C++ 将图像转换为整数数组

similarity - RGBA 颜色空间中的颜色相似度/距离

java - 将消息存储到 R、G、B 而不是 Alpha