【发布时间】:2014-12-12 00:40:48
【问题描述】:
我正在尝试将多个图像串联成一个,但遇到了问题。为了隔离这一点,我创建了以下 POC,我正在尝试解决它,以便我了解如何使用 JAI API。
在 POC 中,我有两个图像“image1.gif”和“image2.gif”,它们都是 256x256。目标是将它们水平连接成一个 512x256 的图像“image3.png”。这是我使用 JAI 编写的代码。
try {
InputStream stream1 = new FileInputStream("D:\\poc\\image1.gif");
InputStream stream2 = new FileInputStream("D:\\poc\\image2.gif");
RenderedImage image1 = ImageIO.read(stream1);
RenderedImage image2 = ImageIO.read(stream2);
ImageLayout imageLayout = new ImageLayout(0,0,512,256);
RenderingHints renderingHints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, imageLayout);
RenderedImage finalImage = MosaicDescriptor.create(new RenderedImage[]{image1, image2}, MosaicDescriptor.MOSAIC_TYPE_OVERLAY, null, null, null, null, renderingHints);
FileStoreDescriptor.create(finalImage, "D:\\poc\\image3.png", "PNG", null, null, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
} catch (IOException e) {
e.printStackTrace();
return;
}
我得到的是正确尺寸 512x256 的图像,第一张图像 (image1) 全部位于图像的左侧,而图像的右侧完全是黑色的。换句话说,就像我将 image1.gif 与一个 256x256 黑色方块连接起来一样。
我尝试将 MosaicType 更改为 MosaicDescriptor.MOSAIC_TYPE_BLEND,但这只是创建了一个相似的图像,只有左半部分由覆盖在 image2 之上的 image1 组成(反之亦然),而右半部分仍然完全是黑色的。
我也尝试过更改 ImageLayout 构造函数的前两个参数。这也不起作用 - 例如,我可以将 ImageLayout 的第一个参数设置为 -256,但随后 image1 显示在图像的右半部分,而图像的左半部分为黑色。
请帮忙!
【问题讨论】:
-
我不知道如何使用 JAI 创建马赛克,但请告诉我在哪里下载 JAI 和 JAI/ImageIO?我疯了...谢谢!
-
嗯,这很奇怪,看来我去的链接,现在已经不存在了。但是,这些二进制文件仍可通过download.java.net/media/jai/builds/release/1_1_3 在线获取
-
是的,很奇怪.. 非常感谢,你知道在哪里可以找到 jai-imageio 吗?谢谢!
-
我不知道那是什么 - ImageIO 类只是在我的 JDK (Java SE 1.6) 中的 rt.jar 下。