私は全面的に投稿しており、まだ確かな答えを得ていません:イメージをJavaでオーバーレイするにはどうしたらいいですか?
私は画像のサイズ変更クラスを作成しました。作物は素晴らしい作品です。私が抱えている問題は、Graphics
のdrawImage
機能で指定した背景色が正しく機能していないことです。私は何を供給しても(この場合はColor.WHITE
)、バックグラウンドとしてデフォルトで黒になります。
また、重ね合わせた画像または一番上の画像(ファイルからのもの)が反転している(そうでないと思われます)か、そうでなければ変色しています。ちょうどあなたが少しこれをより良い概念化することができます、私はJPEGを取って、新しいBufferedImage
の上にそれをオーバーレイして、新しいバッファリングされたイメージの背景が設定されていません。
public void Crop(int Height, int Width, int SourceX, int SourceY) throws Exception {
//output height and width
int OutputWidth = this.OutputImage.getWidth();
int OutputHeight = this.OutputImage.getHeight();
//create output streams
ByteArrayOutputStream MyByteArrayOutputStream = new ByteArrayOutputStream();
MemoryCacheImageOutputStream MyMemoryCacheImageOutputStream = new MemoryCacheImageOutputStream(MyByteArrayOutputStream);
//Create a new BufferedImage
BufferedImage NewImage = new BufferedImage(Width, Height, BufferedImage.TYPE_INT_RGB);
Graphics MyGraphics = NewImage.createGraphics();
MyGraphics.drawImage(this.OutputImage, -SourceX, -SourceY, OutputWidth, OutputHeight, Color.WHITE, null);
// Get Writer and set compression
Iterator MyIterator = ImageIO.getImageWritersByFormatName("png");
if (MyIterator.hasNext()) {
//get image writer
ImageWriter MyImageWriter = (ImageWriter)MyIterator.next();
//get params
ImageWriteParam MyImageWriteParam = MyImageWriter.getDefaultWriteParam();
//set outputstream
MyImageWriter.setOutput(MyMemoryCacheImageOutputStream);
//create new ioimage
IIOImage MyIIOImage = new IIOImage(NewImage, null, null);
//write new image
MyImageWriter.write(null, MyIIOImage, MyImageWriteParam);
}
//convert output stream back to inputstream
ByteArrayInputStream MyByteArrayInputStream = new ByteArrayInputStream(MyByteArrayOutputStream.toByteArray());
MemoryCacheImageInputStream MyMemoryCacheImageInputStream = new MemoryCacheImageInputStream(MyByteArrayInputStream);
//resassign as a buffered image
this.OutputImage = ImageIO.read(MyMemoryCacheImageInputStream);
}
お返事ありがとうございました。ありがとうございました 隔離されている限り、私は奇妙なものをすべて取り除き、新しいバッファリングされたイメージとsetBackgroundColorを作成し、this.OutputImageに割り当てました。また、私はGraphics2Dではなく、Graphicsを使用しています。 –
新しいコードの外観はどうですか?背景色のみを設定しても画像は変更されません。クリア操作(clearRect、おそらくGraphics2Dコンポジット)でのみ使用されます。ここ –