4

複数の透明なインスタンスを重ねて (別名 Photoshop レイヤー)、1 つの出力BufferedImageに焼き付けたいと考えています。BufferedImageどうすればいいですか?

4

3 に答える 3

10

バッファリングされた画像を取得し、追加するオブジェクトを作成するために追加の画像を作成するのが最善の策だと思います。次に、Graphics.drawImage()を使用して、それらを互いに重ね合わせます。

したがって、これらの線に沿った何か:

BufferedImage a = ImageIO.read(new File(filePath, "a.png"));
BufferedImage b = ImageIO.read(new File(filePath, "b.png"));
BufferedImage c = new BufferedImage(a.getWidth(), a.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics g = c.getGraphics();
g.drawImage(a, 0, 0, null);
g.drawImage(b, 0, 0, null);
于 2012-06-22T00:05:36.790 に答える
3

最初の BufferedImage の名前が bi1 で、2 番目の BufferedImage の名前が bi2 で、それらを重ねたい画像が target であるとしましょう。

BufferedImage target=new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D targetGraphics=target.createImage();
targetGraphics.drawImage(bi1,0,0,null);//draws the first image onto it

int[] pixels2=((DataBufferInt) bi2.getRaster().getDataBuffer()).getData();
int[] pixelsTgt=((DataBufferInt) target.getRaster().getDataBuffer()).getData();
for(int a=0;a<pixels2.length;a++)
{
     pixelsTgt[a]+=pixels2[a];//this adds the pixels together
}

アルファがオンになるように、3 つの BufferedImage オブジェクトがすべて TYPE_INT_ARGB であることを確認してください。2 つの合計が最大整数を超えている場合、これにより、必要な正確な結果が得られない可能性があるため、それを修正するために何かを追加することをお勧めします。ピクセルは、ビット シフトを使用して AARRGGBB として順序付けられた整数で色を追加します。

于 2012-06-22T00:10:40.977 に答える
2

ここAlphaCompositeで説明するグラフィックス コンテキストで使用できるモードについても検討してください。

画像

于 2012-06-22T01:13:13.353 に答える