JavaのdrawImage()はどのように使用する必要がありますか? JDKのドキュメントが近日公開されるとは思いません。たとえば、すべてのdrawImage署名にはImageObserverが必要ですが、このドキュメントは新規ユーザーにはあまり役立ちません。
Graphics.drawImage(img, x, y, null)
[または同様のもの]で逃げることができます。 ImageObserver
パラメータは、描画操作の進行状況を通知するコールバックです。また、Imageパラメータを非同期でフェッチする場合にのみ実際に役立ちます。
明確にするために、不完全にロードされた画像でdrawImage
を呼び出すと、次のようになります。
Image
を描画します(ロードされているものすべて)ImageObserver
を呼び出します基本的に、メモリ内でImage
s(ファイルシステムからロードされるか、プログラムによって構築される)で作業している場合は、ImageObserver
パラメータについて心配する必要はありません。ネットワーク全体でImage
sをロードしていて、ロードを明示的に待機していない場合は、ImageObserver
を使用して、Image
を「完全に」描画する必要があります。 。
Image
オブジェクトは必ずしも完全にロードされているわけではありません。不完全な画像に対してGraphics.drawImage
が呼び出されると、可能な限り多くの画像が描画され、さらに多くの画像が読み込まれると(ImageObserver
を呼び出して)imageUpdate
に警告します。
ImageObserver
はnullにすることができます。その場合、通知は届きません。これは、画像が読み込まれていることがわかっている場合、または再描画を行う別のメカニズムがすでに存在する場合によく見られます。
Component
はImageObserver
を実装し、そのimageUpdate
メソッドは影響を受ける領域にrepaint
を引き起こすことに注意してください。
他の人が示唆しているように、このAPIは、レンダリングされる画像がネットワーク経由で読み込まれると想定されたときに考案されました。ツールキットに画像をロードするように依頼するとき、それは単なるシェルであり、そのサイズとピクセルを知るために必要なバイトはまだネットワークを這っていると想定されます。
この場合、drawImageは最初に呼び出されたときに何もレンダリングしない可能性があります。サイズとピクセルが利用可能になると、ImageObserverに通知されます。の場合 Component implements ImageObserver
、その動作は、データが利用可能になったときに再描画することです。
実際、私はdrawImage()
を何度も使用しました。常にImageObserver
パラメーターをnull
に設定しました。 Okそれが役に立たないという意味ではありませんが、私はその使用法を知らずに必要なことを何でもしました。