Graphics コンテキストを取得して描画し、Graphics オブジェクトを破棄することで、任意の画像を BufferedImage に描画できます。例えば
// get a Graphics object from BufferedImage, img1
Graphics g = img1.getGraphics();
// use that g to draw another BufferedImage starting at x, y of 0, 0
g.drawImage(img2, 0, 0, null);
// clean up resources so as not to run out.
g.dispose();
現在、img1 は古い img1 を表示し、その上に img2 があります。画像を透明にしたい場合は、アルファ合成とその使用方法を読む必要があります
編集
編集した質問について:
2 つの Graphics オブジェクトを取得しました。これらを 1 つに結合することはできますか?
Hovercraft Full of Eels の答えは役に立ちますが、私が意図したものではありません。プライベート Graphics gr1 とプライベート Graphics gr2 の 2 つの Graphics オブジェクトがあるとします。では、それらを paintComponent(Graphics) メソッドでマージして、自分の (JPanel など) に描画するにはどうすればよいですか?
問題は画像に関するものではなく、単なる Graphics オブジェクトに関するものです。すみません、最初の段落は誤解を招くものでした。
グラフィックス オブジェクトは、画像や画面に何かを描画するために使用されるペンやペイント ブラシと考えているため、この要求はやや混乱します。したがって、Graphics オブジェクトを何かに描画するのではなく、Graphics オブジェクトをツールとして使用して、グラフィックを表示または保存できる他のものに描画すると思います。あなたが何をしようとしているのかを推測し続ける必要がないように、十分な詳細を提供して、質問をすることにもっと多くの努力を払う必要があります. 全貌を教えてください。
編集 2
質問に対する最新の編集に応じて:
paintComponent() メソッドで描画する場合、画面を再描画するとすべてがなくなってしまうのは面倒です。何かを移動したい場合は、すべての座標と寸法を保存し、それらを調整して、グラフィックスで何らかの方法で取得する必要があります。物体。私が自問自答したのは、どのオブジェクトが最も適しているか、または Graphics オブジェクトを保存するかということでした。Graphics オブジェクトだと思いました。しかし、問題は、(たとえば) 2 つの四角形があり、1 つが左に移動し、もう 1 つが右に移動する場合、1 つの Graphics オブジェクトがあるとできないことです。
いいえ、より良い解決策は、 BufferedImage を使用して保存することです。背景の BufferedImage に画像を追加する場合は、BufferedImage の Graphics オブジェクトを呼び出して取得し、Graphics オブジェクトのメソッドgetGraphics()
を使用して画像を描画し、BufferedImage のリソースを失わないようにグラフィックスオブジェクト。drawImage(...)
dispose()
バックグラウンドで背景 BufferedImage を描画するには、paintComponent(...)
メソッドの先頭で、通常はメソッドを呼び出した直後に呼び出しsuper.paintComponent(...)
ます。
私の解決策は、動きをシミュレートするように変換してから画面に描画できる複数のグラフィックス オブジェクトでした。@Hovercraft Full of Eels 私はあなた(そしてほとんどのSO'ers)があなたの答えを見て、これは良い解決策ではないと思うと思います。
ええ、あなたの推測は正しいです。あなたが提案したものよりも優れた解決策があると思います。
私が得ていることの例は、この質問に対する私の回答のコード投稿にあります: changing-jpanel-graphics-g-color-drawing-line。
私のコードを実行すると、次のように表示されます。