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

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

注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。

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

PictureBoxコントロールのImageプロパティにGifアニメーションを設定するのが最も簡単な方法です。

以下の例では、PictureBoxコントロール(PictureBox1)にGifアニメーション(C:\anime.gif)を表示させています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

PictureBox1.Image = Image.FromFile("C:\anime.gif")
C#
コードを隠すコードを選択
//using System.Drawing;

PictureBox1.Image = Image.FromFile(@"C:\anime.gif");

ImageAnimatorクラスを使用する方法

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

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

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

Private animatedImage As 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)
    'アニメ開始
    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)
    'フレームを進める
    ImageAnimator.UpdateFrames(animatedImage)
    '画像の表示
    e.Graphics.DrawImage(animatedImage, 0, 0)
End Sub
C#
コードを隠すコードを選択
//using System.Drawing;

private 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);
    //アニメ開始
    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)
{
    //フレームを進める
    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#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。