我有两个RenderedImages
。我想用这两幅图像做一个Overlay Operation
,因此它们需要匹配数据类型和波段数。
我的问题是一个图像有3个波段(RGB),第二个图像有4个波段(ARGB)。JAI将Alpha通道添加到RenderedImage
我的问题是如何添加一个Alpha通道到第一个图像,所以我可以做Overlay Operation
?
EDIT
好的,我发现添加Alpha通道到所述第一图像的方法。以下是代码。我只是创建了一个单独的带状常量图像,并将其与我的第一张图像合并。
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);
现在的问题是,我每次添加覆盖图像都会改变颜色。所有的颜色都变成红色或粉红色的细微差别。当我添加第二个覆盖图时,图像会再次变为正常,但第一个覆盖图会更改颜色。所有黑色区域都变成白色。
此外,叠加的背景不透明。它是灰色的。
以下是图像的例子,让你看到改变颜色如何:
正如你可以看到,图片和叠加改变颜色和叠加的背景不透明。
你能帮我解决这个问题,让图像始终显示正确吗?谢谢!
这没有奏效。图像不断变化的颜色。 – adryr
也没有应用你的参数块?只需将未改变的第一张图像绘制成新的干净的缓冲图像? – cello
是的,我创建了一个'TYPE_4BYTE_ARGB'类型的'BufferedImage',并在其中绘制了第一个图像。 'img.createGraphics()。drawRenderedImage(finalImage,new AffineTransform());' – adryr