DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

GIFアニメーションを表示する

補足:画像の表示方法が分からないという方は、まず「画像ファイルを表示する」をご覧ください。

PictureBox.Imageプロパティを使用する方法

ピクチャボックスの場合、ピクチャボックス(PictureBox1)にGifアニメーション("C:\anime.gif")を表示させる一番簡単な方法は、次のようにPictureBox1のImageプロパティにImageを指定することです。

VB.NET
コードを隠すコードを選択
PictureBox1.Image = Image.FromFile("C:\anime.gif")
C#
コードを隠すコードを選択
PictureBox1.Image = Image.FromFile(@"C:\anime.gif");

ImageAnimatorクラスを使用する方法

それ以外の方法としては、ImageAnimatorクラスを使うのが一般的です。手順としては、まずImageAnimator.Animateメソッドによりアニメを開始し、UpdateFramesメソッドにより次のフレームへ進めます。

次にGIFアニメを表示する例を示します。ここではフォームForm1にGIFアニメ"C:\anime.gif"を表示しています。

VB.NET
コードを隠すコードを選択
Private animatedImage As System.Drawing.Bitmap

'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    'GIFアニメ画像の読み込み
    animatedImage = New Bitmap("C:\anim.gif")
    'フォームのPaintイベントハンドラを追加
    AddHandler Me.Paint, _
        New PaintEventHandler(AddressOf Me.Form1_Paint)
    'アニメ開始
    System.Drawing.ImageAnimator.Animate(animatedImage, _
        New EventHandler(AddressOf Me.Image_FrameChanged))
End Sub

Private Sub Image_FrameChanged(ByVal o As Object, ByVal e As EventArgs)
    'Paintイベントハンドラを呼び出す
    Me.Invalidate()
End Sub

'フォームのPaintイベントハンドラ
Private Sub Form1_Paint(ByVal sender As Object, _
        ByVal e As PaintEventArgs)
    'フレームを進める
    System.Drawing.ImageAnimator.UpdateFrames(animatedImage)
    '画像の表示
    e.Graphics.DrawImage(animatedImage, 0, 0)
End Sub
C#
コードを隠すコードを選択
private System.Drawing.Bitmap animatedImage;

//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
    //GIFアニメ画像の読み込み
    animatedImage = new Bitmap(@"C:\anim.gif");
    //フォームのPaintイベントハンドラを追加
    this.Paint += new PaintEventHandler(this.Form1_Paint);
    //アニメ開始
    System.Drawing.ImageAnimator.Animate(animatedImage,
        new EventHandler(this.Image_FrameChanged));
}

private void Image_FrameChanged(object o, EventArgs e)
{
    //Paintイベントハンドラを呼び出す
    this.Invalidate();
}

//フォームのPaintイベントハンドラ
private void Form1_Paint(object sender, PaintEventArgs e)
{
    //フレームを進める
    System.Drawing.ImageAnimator.UpdateFrames(animatedImage);
    //画像の表示
    e.Graphics.DrawImage(animatedImage, 0, 0);
}

なお、アニメーションを終了するには、ImageAnimator.StopAnimateメソッドを呼び出します。

補足:GIFのライセンス問題に触れておきましょう。GIFフォーマットで使用されているLZW圧縮伸張アルゴリズムに関して、米国UNISYS社が特許を持っていました。そのため、GIFを表示したり、保存したりできるソフトウェアを作成するには、米国UNISYS社とライセンス契約を結ぶ必要がありました。しかし、日本では、2004年6月20日にこの特許期限が切れました。よって、現在ではGIFを扱うソフトウェアの開発は、自由に行えます。
  • 履歴:
  • 2006/12/1 GIFライセンス問題に関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。