これが合成に関係していることは知っていますが、何を解決することはできません。コードの前のセクションでは、BufferedImage 内の特定のピクセル リストが透明な黒に設定されています。
for(Pixel p : closed){
Color c = new Color(image.getRGB(p.x, p.y));
Color newC = new Color(0,0,0, 0);
image.setRGB(p.x, p.y, newC.getRGB() & 0x00000000);
}
if(andCrop){
image = image.getSubimage(left, top, right-left, bottom-top);
}
return image;
次に、画像を書き出そうとします:
try {
BufferedImage out = new BufferedImage(image.getWidth(), image.getHeight(), java.awt.Transparency.TRANSLUCENT);
Graphics2D g2d = out.createGraphics();
g2d.setComposite(AlphaComposite.Clear);
g2d.fillRect(0, 0, image.getWidth(), image.getHeight());
g2d.setComposite(AlphaComposite.Src);
g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
g2d.dispose();
File outputfile = new File(file);
ImageIO.write(out, "png", outputfile);
} catch (IOException e) {
}
これで、画像を描画する前に「out」が明確であることがわかりました。私が得ていないのは、私の合成の問題です。透明になる代わりに、完全に黒くなります。
使用されるバッファリングされたイメージはすべて INT_ARGB です。
編集 - これは解決されました。画像ソースは ImageIO.read からのもので、返された BufferedImage はアルファをサポートしていませんでした。読み取り後の迅速な変換により、残りのコードがスムーズに実行されます。