画像情報量が多く、上記の直接表示方法を使用すると、前半部分が表示され、後半部分がファイルから読み込まれていないため、表示がまだらになってしまう場合があります。表示効果を向上させるために、多くのアプリケーションは画像バッファリング技術を使用します。つまり、最初に画像をメモリに完全にロードし、バッファ内に画像またはグラフィックスを描画し、次にバッファ内に描画された画像またはグラフィックスを画面に出力します。すぐに。バッファリング テクノロジはちらつきの問題を解決するだけでなく、画像はコンピュータ メモリ内で作成されるため、プログラムは画像に対してピクセル レベルの処理を実行し、表示する前に複雑な画像変換を完了できます。
[例] 小さなアプリケーション プログラムで画像バッファー表示技術をデモします。プログラムの実行中、画像領域内でマウスを押すと画像上に境界線が表示され、マウスを動かすと画像もそれに応じて移動します。マウスを持ち上げると、境界線が消えます。プログラムは、まず 2 つの状態の画像を 2 つのバッファに配置します。マウスをドラッグすると、マウス ダウン スタイルの画像が新しい位置に継続的に再描画されます。マウスを上げると、マウス アップ スタイルの画像が再描画されます。 。
import java.applet.*;import java.awt.*;imprt java.awt.image. * ;import javax.swing.*;import java.event.*;public class Example7_6 extends Applet{ Image myPicture; ) メソッドを使用するには、最初に Image オブジェクトを定義し、createImage() メソッドの戻り値を割り当てます。次に、Graphics オブジェクトを作成してグラフィックス環境を割り当てます。最後に、Graphics オブジェクトにdrawImage() メソッドを呼び出して画像を表示させます。ここでの Graphics オブジェクト offScreenGc は非スクリーン オブジェクトであるため、アプレット ウィンドウには画像は表示されません*/ public void init(){ myPicture = getImage(getCodeBase(), "myPic.JPG"); (size() .width, size().height); グラフィックス offScreenGc = offScreenImage.getGraphics(); BufferedDemo(myPicture); } /*drawImage() メソッドの 4 番目のパラメータは、init() メソッドで ImageObserver インターフェイスを実装するため、drawImage() メソッドを呼び出すためのパラメータは this であるため、アプレットは imageUpdate を定義する必要があります。 () メソッド*/ public boolean imageUpdate(Image img, int infoFlg, int x, int y, int w, int h){ if (infoFlg = ALLBITS){ // 画像がメモリに完全にロードされたことを示します repaint(); // スレッドが imageUpdate() メソッドを再度呼び出すのを防ぎます }}/*プログラムの実行プロセスは次のとおりです。アプレットがdrawImage()メソッドを呼び出すと、drawImage()メソッドはimageUpdate()メソッドを呼び出すスレッドを作成し、imageUpdate()メソッドで画像が部分的にメモリに転送されたかどうかを判断します。作成されたスレッドは、メソッドが false を返すまで、imageUpdate() メソッドを呼び出し続けます。パラメータ infoFlg を使用すると、アプレットは画像がどのようにメモリにロードされるかを知ることができます。 infoFlg が ALLBITS に等しい場合、画像がメモリに完全にロードされたことを意味します。このメソッドは、イメージがメモリに完全にロードされたことを検出すると、imageLoaded を true に設定し、repaint() メソッドを呼び出してアプレット ウィンドウを再描画します。このメソッドは false を返し、スレッドが imageUpdate() メソッドを再度呼び出すのを防ぎます。 */class BufferedDemo extends JFrame{ public BufferedDemo(Image img){ this.getContentPane().add(new PicPanel(img)); setSize(300, 300); ; }}クラス PicPane は JPanel を拡張し、MouseListener、MouseMotionListener{ int x = 0, y = 0、dx = 0、cy = 0; BufferedImage bimg1、bimg2; public picPanel(Image img){ this.addMouseListener(this); bimg1 = new BufferedImage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_ARGB); bimg2 = new BufferedImage(img.getWidth(this), img.getHeight(this), BufferedImage.TYPE_INT_ARGB); createGraphics(); g2D1.drawImage(img, 0, 0, this); g2D2.drawImage(img, 0, 0, this); g2D2.drawRect(1, 1, img.getWidth(this) - 3, img.getHeight(this) - 3); } public void ペイントコンポーネント(グラフィックス g){ super.painComponent(g); (Graphics2D)g; if (upState) g2D.drawImage(bimg1, x, y, this); else g2D.drawImage(bimg2.x, y, this); if (e.getX) () >= x && e.getX() < x + bimg1.getWidth(this) && e.getY() >= y&& e.getY() < y + bimg1.getHeight(this)){ upstate = false; setCursor(Cursor.getPredependentCursor(Coursor.HAND_CURSOR)); dx = e.getX() - x; y; repain(); } } public void MouseExited(MouseEvent e){} e){} public void MouseEntered(MouseEvent e){} public void MouseClosed(MouseEvent e){ this.setCursor(Cursor.getpredefinedCursor(Cursor.DEFAULT_CURSOR)) } public void MouseMoved(MouseEvent e); ){} public void MouseDragged(MouseEvent e){ if (!upState){ x = e.getX() - dx; y = e.getY() - dy;
バッファー イメージを作成するには、プログラムで java.awt.image パッケージに BufferedImage クラスを導入する必要があります。バッファー イメージを作成するには、createImage() メソッドを呼び出します。このメソッドは Image オブジェクトを返し、それを BufferedImage オブジェクトに変換します。たとえば、次のコードを実行します。
BufferedImage bimage = (BufferedImage)this.createImage(this.getWidth(),this.getHeight());
以下の構築方法を使用して作成することもできます。
BufferedImage(int width,int high, int imageType);
パラメータ imageType は画像のタイプです。
バッファを使用して画像を表示するには、まずバッファに画像を準備し、次にバッファにある画像をインターフェイスに表示する必要があります。画像を表示するには、次の方法で作成できるグラフィックス オブジェクトが必要です。
Graphics2D g2d = bimge.createGraphics();