2009-11-05 10 views
19

JavaのdrawImage()はどのように使用しますか?私は非常に近いJDKのドキュメントを見つけることはありません。たとえば、すべてのdrawImageシグネチャにはImageObserverが必要ですが、このドキュメントは新規ユーザーにとってはあまり役に立ちません。Java Graphics.drawImage()の動作とImageObserverの役割

答えて

25

Graphics.drawImage(img, x, y, null) [またはそれに類する]で逃げることができます。 ImageObserverパラメータは、描画操作の進行状況を通知するコールバックです。実際には、Imageパラメータを非同期に取得する場合にのみ便利です。

あなたが不完全にロードされたイメージ、それは意志とdrawImageを呼び出す場合は、より明確にするには、次の

  1. リターン偽(すぐに)
  2. できるだけImageの限りを描く(ロードされているすべての)
  3. と、あなたが私に作業している場合は画像のより多くが、基本的に

利用可能になったとき、いくつかの将来の時点で、ImageObserverへの呼び出しnメモリImage(ファイルシステムからロードされるか、プログラムによって構築される)は、ImageObserverパラメータを心配しないでください。ネットワーク上にImageをロードしていて、明示的にロードするのを待っていない場合は、「完全に」Imageを描画するためにImageObserverを使用する必要があります。

+0

ありがとう、これは本当に有用です。 –

1

実際にはを複数回使用して、ImageObserverパラメータをnullに設定しています。それは役に立たないという意味ではありませんが、私はその使い方を知らないうちに必要なことをしました。

+0

:-)私もそうでしたが、それが問題かどうかはわかりませんでした。 –

8

Imageオブジェクトが必ずしも完全に読み込まれているとは限りません。不完全なイメージに対してGraphics.drawImageが呼び出された場合、できるだけ多くのイメージが描画され、さらに多くのイメージがロードされたときにに(imageUpdateを呼び出して)警告します。

ImageObserverはnullでもかまいません。この場合、通知はありません。イメージがロードされていることがわかっている場合、または再描画を行う別のメカニズムが既に存在する場合は、これが一般的です。 ComponentImageObserverを実装し、そのimageUpdate方法は、患部にrepaintを引き起こすこと

注意。

+1

アニメーション画像に対しても 'imageUpdate'が呼び出されます。 –

1

他の人が暗示しているように、このAPIは、レンダリングされるイメージがネットワーク経由で読み込まれることが想定されているときに考えられました。ツールキットに画像をロードするように頼んだら、それは単なるシェルであり、そのサイズとピクセルを知るために必要なバイト数は依然としてワイヤーを下っています。

この場合、drawImageは、最初に呼び出されたときに何も表示しないことがあります。サイズとピクセルが利用可能になると、ImageObserverに通知されます。 Component implements ImageObserverの場合、その動作はデータが利用可能なときに再描画することです。

関連する問題