WPF:GIFを再生するのは大変だ!

WPF:GIFを再生するのは大変だ!

本日はWPFで動的なGIF画像を表示するためのライブラリを紹介します。XAMLまたはコードで使用できます:`WpfAnimatedGif`。

最終更新 2021/07/02 22:12
沙漠尽头的狼
読了目安 2 分
カテゴリ
WPF
テーマ
WPFオープンソースプロジェクト
タグ
.NET WPF WPFオープンソースプロジェクト オープンソース GIF

WPF で GIF を再生するのに悩んでいませんか?

WpfAnimatedGif

リポジトリ: https://github.com/XamlAnimatedGif/WpfAnimatedGif

NuGet パッケージ: WpfAnimatedGif

今回は、WPF でアニメーション GIF を表示するためのライブラリ WpfAnimatedGif を紹介します。XAML またはコードで使用できます。

簡単に使えます。XAML では、AnimatedSource 添付プロパティを使用して表示する GIF 画像を設定します(Source プロパティの代わりに使います)。

<Window
  x:Class="WpfAnimatedGif.Demo.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:gif="http://wpfanimatedgif.codeplex.com"
  Title="MainWindow"
  Height="350"
  Width="525"
>
  <Grid> <image gif:ImageBehavior.AnimatedSource="Images/animated.gif" /></Grid
></Window>

繰り返し動作も指定できます(デフォルトは 0x で、GIF メタデータの繰り返し回数が使用されます)。

<image
  gif:ImageBehavior.RepeatBehavior="3x"
  gif:ImageBehavior.AnimatedSource="Images/animated.gif"
/>

もちろん、コードで GIF 画像を設定することもできます。

var image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(fileName);
image.EndInit();
ImageBehavior.SetAnimatedSource(img, image);

詳細な使い方は wiki を参照してください。

特徴

  • 新しいコントロールを追加せず、WPF ネイティブの Image コントロールに添付プロパティを追加するだけで GIF 画像の動的読み込みを実現
  • 実際のフレーム間隔を考慮
  • 繰り返し動作を指定可能。未指定の場合は GIF メタデータの繰り返し回数が使用される
  • アニメーション完了時に通知可能。完了後に特定の処理を実行できる
  • デザインモードでのアニメーションプレビュー(明示的に有効化する必要あり)
  • アニメーションの手動制御に対応(一時停止/再開/ジャンプ)
さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/09/13

WPF から Avalonia への移行シリーズ:なぜ WPF プログラムを Avalonia に移行しなければならないのか

過去数年間、当社の上位機ソフトウェアは主に WPF と WinForm で開発されてきました。これらの技術は Windows プラットフォームで非常に便利であり、小規模試作から現在の規模拡大による納品まで、私たちを支えてきました。しかし、ビジネスの発展や顧客ニーズの変化に伴い、単一の Windows テクノロジースタックは私たちが必ず乗り越えなければならない壁となってきました。

続きを読む
同じカテゴリ / 同じタグ 2025/01/26

WPF カスタムXMLファイルによる国際化

この記事では、WPFプログラムでカスタムXMLファイルを使用して国際化を実現する方法について詳しく説明します。必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードおよびXAMLインターフェースでの翻訳文字列の使用などを含み、ソースコードのリンクも提供し、開発者がWPFアプリケーションの国際化を簡単に実装できるように支援します。

続きを読む