Javaプログラミング/Javaプログラミング関連情報

GIFアニメーションを制御するには?(3ページ目)

今回は、JavaでGIFアニメーションを制御する方法について考えてみましょう。

執筆者:掌田 津耶乃

アニメーションの速度を調整する


この「imageUpdateで次のフレームの呼び出しを行うかどうかが調整できる」ということがわかると、これを利用した応用もいろいろ考えられるようになるでしょう。例えば、「アニメーションの速度を調整する」ということも可能になりますね。これは、要するにimageUpdateで少しだけsleepしてからreturnすればいいわけです。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.ImageObserver;

public class Sample extends Frame {
  private Image img = null;
  private boolean anim = true;
  private int wait = 100;

  public static void main(String[] args){
    int n;
    try {
      n = Integer.parseInt(args[0]);
    } catch (RuntimeException ex) {
      n = 100;
      ex.printStackTrace();
    }
    new Sample(n).setVisible(true);
  }
  
  public Sample(int n){
    wait = n;
    setSize(300,200);
    img = Toolkit.getDefaultToolkit().createImage("anim.gif");
    this.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent ev){
        System.exit(0);
      }
    });
    this.addMouseListener(new MouseAdapter(){
      public void mouseClicked(MouseEvent ev){
        anim = !anim;
        repaint();
      }
    });
  }
  
  public void update(Graphics g){
    paint(g);
  }
  
  public void paint(Graphics g){
    g.drawImage(img,50,50,this);
  }
  
  public boolean imageUpdate(Image im,int flag,int x,int y,int w,int h){
    super.imageUpdate(im,flag,x,y,w,h);
    if ((flag & ImageObserver.FRAMEBITS) != 0){
      try {
        Thread.sleep(wait);
      } catch (InterruptedException ex) {
        ex.printStackTrace();
      }
      return anim;
    }
    return true;
  }
}


ここでは、Sampleを起動する際、「java Sample 100」というように再描画の間隔を示す値(ミリ秒)を引数に指定することで、アニメーションの速度を設定できるようにしてあります。imageUpdateを見るとわかりますが、(flag & ImageObserver.FRAMEBITS) != 0であった場合、Thread.sleepでスレッドを一時的に停止しています。これで次のフレーム更新までの間隔を調整しているわけです。


【Javadocリファレンス】
java.awt.image.ImageObserverクラス
java.awt.Graphicsクラス
【編集部おすすめの購入サイト】
楽天市場で Java 関連の書籍を見るAmazon で Java 関連の書籍を見る
  • 前のページへ
  • 1
  • 2
  • 3
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます