複数の画像を 1 つに連結しようとしていますが、問題が発生しています。これを分離するために、JAI API の使用方法を理解するために解決しようとしている次の POC を作成しました。
POC には、256x256 の 2 つの画像 "image1.gif" と "image2.gif" があります。目的は、それらを水平方向に連結して、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 に変更しようとしましたが、これは同様の画像を作成するだけで、左半分は image1 が image2 の上に重ねられたもの (またはその逆) で構成され、右半分はまだ完全に黒です。
また、ImageLayout コンストラクターの最初の 2 つのパラメーターを変更してみました。ただし、これも機能しません。たとえば、ImageLayout の最初のパラメーターを -256 に設定できますが、image1 は画像の右半分に表示され、画像の左半分は黒になります。
助けてください!