C#のwinformsでアニメーションGIFを表示する。

C# コンピュータ
C#

gifファイルをエクスプローラーからドラッグアンドドロップすることでアニメーションを表示します。

実行環境構築

プロジェクトの作成

mkdir プロジェクト名
cd プロジェクト名
dotnet new winforms
code .

ソースプログラム

namespace AnimeGif;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Text = "AnimeGif";
        Size = new System.Drawing.Size(850, 800);

        var picbox = new PictureBox {
            SizeMode = PictureBoxSizeMode.Zoom,
            Dock = DockStyle.Fill,
            AllowDrop = true,
            Image = new Bitmap(800, 600),
        };
        var files = new List<string>();

        using (var g = Graphics.FromImage(picbox.Image)) {
            g.DrawString("こちらにD&D", new Font("MS UI Gothic", 24),  Brushes.Green, 0.0f, 0.0f);
        }
        picbox.DragEnter += (sender, e) => {
            if (e.Data == null) return;
            if(!e.Data.GetDataPresent(DataFormats.FileDrop)) return;
            e.Effect = DragDropEffects.Copy;
        };
        picbox.DragDrop += (sender, e) => {
            if (e.Data == null) return;
            var fd = e.Data.GetData(DataFormats.FileDrop);
            if (fd == null) return;
            string? path = ((string[])fd)[0];
            if (path is null) return;

            var ext = System.IO.Path.GetExtension(path).ToLower();

            if (picbox.Image is not null) picbox.Image.Dispose();
            picbox.Image = new Bitmap(path);

            if (ext == ".gif") {
                ImageAnimator.Animate(picbox.Image,
                delegate{
                    picbox.Invalidate();
                });
            }
        };
        picbox.Paint += (o, e) => {
            //if (picbox.Image.RawFormat != System.Drawing.Imaging.ImageFormat.Gif) return;
            //ImageAnimator.UpdateFrames(picbox.Image);
            //e.Graphics.DrawImage(vb, 0, 0);
        };

        Controls.Add(picbox);
    }
}

実行

dotnet run

コメント