トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> コードサンプル >> Imageクラス, ダブルバッファリングについて ※管理人のメモ用ページです。

Imageクラス 及び ダブルバッファリング について


Imageクラス使用例

import java.applet.*;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.*;

public class TestApplet04 extends Applet
 implements Runnable {

    Thread t;
    Image img;
    Image buffer;
    int x;

    public void init(){

        //画像読み込み
        img = getImage(getDocumentBase(), "img.jpg");

        //バッファ作成
        Dimension d = getSize();
        buffer = createImage(d.width, d.height);

        x = -1;

        //スレッド開始
        t = new Thread(this);
        t.start();
    }

    public void run(){
        try{
            while (true) {
                int imgWidth,imgHeight;
                if ((imgWidth = img.getWidth(null)) > 0 & (imgHeight = img.getHeight(null)) > 0) {
                    //画像がロードされていたら

                    Dimension d = getSize();
                    if (d.width - x < imgWidth) {
                        //右端までいってたら、再度左端に画像を表示
                        x = 0;
                    }

                    repaint();

                    x += 10;
                }

                Thread.sleep(100);
            }
        } catch (InterruptedException e) {
        }
    }

    public void paint(Graphics g) {
        if (x < 0) {
            g.drawString("画像のロード中です。",10,50);
        } else {
            g.drawImage(img, x, 0, this);
        }
    }
}
結果:

ダブルバッファリング

import java.applet.*;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Color;
import java.awt.event.*;

public class TestApplet05 extends Applet
 implements Runnable {

    Thread t;
    Image img;
    Image buffer;
    Graphics gBuffer;
    int x;

    public void init(){

        //画像読み込み
        img = getImage(getDocumentBase(), "img.jpg");

        //バッファ作成
        Dimension d = getSize();
        buffer = createImage(d.width, d.height);

        x = -1;

        //スレッド開始
        t = new Thread(this);
        t.start();
    }

    public void run(){
        try{
            while (true) {
                int imgWidth,imgHeight;
                if ((imgWidth = img.getWidth(null)) > 0 & (imgHeight = img.getHeight(null)) > 0) {
                    //画像がロードされていたら

                    x = x < 0 ? 0 : x;

                    Dimension d = getSize();
                    if (d.width - x < imgWidth) {
                        //右端までいってたら、再度左端に画像を表示
                        x = 0;
                    }

                    if (gBuffer == null) {
                        gBuffer = buffer.getGraphics();
                    }

                    //バッファに背景を描画
                    gBuffer.setColor(Color.white);
                    gBuffer.fillRect(0, 0, d.width, d.height);

                    //バッファに画像を描画
                    gBuffer.drawImage(img, x, 0, this);

                    repaint();

                    x += 10;
                }

                Thread.sleep(100);
            }
        } catch (InterruptedException e) {
        }
    }

    //この塗りつぶし防止
    public void update(Graphics g){
        paint(g);
    }

    public void paint(Graphics g) {
        if (x < 0) {
            g.drawString("画像のロード中です。",10,50);
        } else {
            g.drawImage(buffer, x, 0, this);
        }
    }
}
結果:
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。