0

2 つの Graphics オブジェクトを取得しました。これらを 1 つに結合することはできますか?

Hovercraft Full of Eels の答えは役に立ちますが、私が意図したものではありません。2 つの Graphics オブジェクトがあるprivate Graphics gr1としprivate Graphics gr2ます。paintComponent(Graphics)さて、それらを自分の(JPanelなど)に描画する方法でそれらをどのようにマージすればよいですか?

問題は画像に関するものではなく、単なる Graphics オブジェクトに関するものです。すみません、最初の段落は誤解を招くものでした。

編集:
うなぎでいっぱいのホバークラフトへの対応:

メソッドでpaintComponent()描画すると、画面を再描画するとすべてが消えてしまうのが面倒で、何かを移動したい場合は、すべての座標と寸法を保存し、それらを調整して Graphics オブジェクトで取得する必要があります。
私が自問自答したのは、どのオブジェクトが最も適しているか、または Graphics オブジェクトを保存するかということでした。Graphics オブジェクトだと思いました。しかし、問題は、(たとえば) 2 つの四角形があり、1 つが左に移動し、もう 1 つが右に移動する場合、1 つの Graphics オブジェクトがあるとできないことです。
私の解決策は、動きをシミュレートするように変換してから画面に描画できる複数のグラフィックス オブジェクトでした。
@Hovercraft Full of Eels 私はあなた(そしてほとんどのSO'ers)があなたの答えを見て、これは良い解決策ではないと思うと思います。
しかし、答えYou're doing it all wrong, you'd better stop programmingは私にはまったく役に立たないので、別の方法を教えてください。

4

2 に答える 2

3

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

私のコードを実行すると、次のように表示されます。

ここに画像の説明を入力

于 2012-08-18T12:33:22.693 に答える
2
  • To impose images, use an appropriate layout, as shown here.

  • To compose images, use an appropriate composite rule, as shown here.

Addendum: @HFOE is correct. An instance of Graphics or Graphics2D, sometimes called a graphics context, is a transitory means to apply rendering methods; the target device or off-screen image must exist independently. Classes implementing the Shape interface are good candidates for encapsulating information about what to render in a given context. AffineTest and GraphPanel are examples.

于 2012-08-18T12:46:45.307 に答える