WPF|C# Lottie アニメーション再生【すごいと感じる】

WPF|C# Lottie アニメーション再生【すごいと感じる】

Lottie アニメーションは、json ファイルとして保存されるアニメーションファイルです。gif と比較してファイルサイズとアニメーションの滑らかさにおいて大きな利点があり、さらにグラフィックはベクターなので拡大してもぼやけません。

最終更新 2022/05/19 6:58
xiejiang
読了目安 3 分
カテゴリ
WPF
テーマ
WPF UIデザイン
タグ
.NET C# WPF アニメーション

Lottie アニメーションは、JSON ファイルとして保存されるアニメーションファイルです。GIF と比較してファイルサイズとアニメーションの滑らかさに大きな利点があり、さらにグラフィックはベクターであるため拡大してもぼやけません。

Lottie は公式に Web、Android、iOS 向けの実装を提供しており、Microsoft は UWP 向けの実装 Lottie-Windows を提供しています。WPF については利用可能な実装が見つかりませんでした。以下に https://github.com/ascora/LottieSharp がありますが、数回テストしたところ、依存している SharpDX が頻繁にエラーを起こし、SharpDX にまったく詳しくないため解決方法がわかりませんでした。

そこで、WPF 開発者として Lottie アニメーションを使いたい場合は、やはり自分で実装する必要があるようです。

WPF で Lottie アニメーションを使用するには、主に以下の問題を解決する必要があります。

  1. Lottie の JSON ファイルを解析し、すべてのデータの意味を理解する。つまり、描画する必要のあるグラフィックオブジェクト(各種円、矩形、色、ぼかし効果、マスク、イージング、軌跡、キーフレームなど)を取得する。
  2. 上記で得たデータを具体的な描画パラメータに変換する。
  3. WPF で高フレームレートの描画を行う。

2022-02-10 時点で、実現可能と思われる方法は以下の通りです。

  1. Microsoft が提供する UWP 実装には既存の解析モジュールがあり、JSON ファイルを直接データクラスとして読み取ることができ、そのモジュールは UWP に依存していないため、そのまま利用できます。いくつかのバグはありますが(数十のアニメーションファイルをテストしたところ、3つは正常に再生できませんでした)、現在このライブラリはまだ活発に開発されているため、改善が期待できます。
  2. SkiaSharp は非常に多機能で、Lottie アニメーションに必要な機能をカバーできるはずであり、クロスプラットフォームでもあるため、データ要件に従って SkiaSharp を使用して描画すればよい。
  3. SkiaSharp 公式が提供する WPF キャンバスは、GPU 描画モードを有効にしても、1080p 60fps には達しません。しかし、以前別のプロジェクトで GLWpfControl を改良し、実測で 2K 144fps 時に RTX 2070 の 23% 使用率で実用的なレベルに達しました。少量のメモリリークはありますが、大きな問題ではありません。

実装に成功すれば、WinForm、WPF、UnoPlatform(GTK)、Avalonia、Blazor(Wasm) および SkiaSharp と .NET Core 3.0+ が動作するすべてのプラットフォームで同時にサポートできるはずです。

現在はまだ調査・検証段階であり、実用的な価値はありません。

現在はプレビュー状態です。サンプル: https://github.com/xiejiang2014/Xiejiang.SKLottie.Samples

この記事は https://www.cnblogs.com/8u7tgyjire7890/p/15881159.html に掲載されています。

以下では、実装に成功したアニメーションを随時更新していきます。更新のたびに、より多くの Lottie 機能をサポートしたことを示します。

2022-02-10 いくつかのシンプルなアニメーションをテストしました。

https://lottiefiles.com/93494-step-loader

https://lottiefiles.com/87474-duo-cubes-loader-2

混合モード

https://lottiefiles.com/89023-loading-circles

2022-02-12 少し複雑な例:

https://lottiefiles.com/84848-polar-bear

Lottie-Windows は PolyStar のデータ解析を実装していないため、黄色い星が欠けています。Lottie-Windows の今後の実装を待つ必要があります。

パスアニメーション。

https://lottiefiles.com/88348-blob

パスオフセット

https://lottiefiles.com/86095-frequencies-fork

2022-02-16:

階層関係、回転

https://lottiefiles.com/85410-wifi

2022-02-18

PreCompLayer、LayerCollectionAsset の処理

https://lottiefiles.com/88964-snowman

より複雑なパスアニメーション。Lottie Viewer と比較すると UAP11 が必要と表示されますが、Windows 10 21H2 にアップグレードしても再生できません。具体的な理由は不明です。

https://lottiefiles.com/87491-liquid-blobby-loader-green

2022-02-19

https://lottiefiles.com/93748-camera-roll

ImageAsset と ImageLayer

https://lottiefiles.com/93795-dog-car-ride

不透明度

https://lottiefiles.com/94910-greenish-arrow-down

2022-02-26

https://lottiefiles.com/87670-satisfied-bear

https://lottiefiles.com/96051-tta-certificate

より複雑な例

https://lottiefiles.com/96388-tiger

2022-02-27

パスの FillType

https://lottiefiles.com/96511-listening-animation

2022-03-02

https://lottiefiles.com/97409-404-page-animation

マスク(+モード)

https://lottiefiles.com/88967-food-delivery-service

マスク(-モード)

https://lottiefiles.com/83667-arty-chat

https://lottiefiles.com/99804-backend-blue

マット(+モード)

https://lottiefiles.com/96957-lock

2020-04-01

https://lottiefiles.com/83395-addland-heatfav-v2

https://lottiefiles.com/96939-files

2022-04-17

https://lottiefiles.com/96245-success

https://lottiefiles.com/88282-rocket

https://github.com/CommunityToolkit/Lottie-Windows/files/8182417/Lottie.Animation.zip

https://lottiefiles.com/102516-growth

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/01/26

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

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

続きを読む
同じカテゴリ / 同じタグ 2024/01/25

C# WPFにおけるFluentValidationの応用

この記事では、C# WPFプロジェクトでFluentValidationを使用してプロパティ検証を行う方法と、MVVMパターンを通じてこの機能を実装する方法について詳しく説明します。

続きを読む