.NET MAUIによるクロスプラットフォーム2D描画(その1)

当社は地図を扱った仕事が多いため、過去に何度もクロスプラットフォーム2D描画を検証してきました。地図という特性上、大量のポリゴンや大量の頂点数をもつ図形の描画でも、問題なく動作するパフォーマンスが必要となります。過去の検証では、Shape系の描画では遅くて使い物にならず、GDI+系の描画では使えるプラットフォームが限定されていました。そのため、これまではWinFormsとLinuxでかろうじて共通化できている程度でした。

.NET MAUI

以前の記事でも名前だけ登場しましたが、.NET MAUIはAndroid, iOS, macOS, Windowsなどで動作する、ネイティブのモバイルアプリとデスクトップアプリを作成するためのクロスプラットフォームフレームワークです。言語はC#でXAMLを使用してUIを構築します。

.NET MAUIは.NET 6とともにリリースされる予定でしたが、残念ながら2022年Q2に延期されて現在はpreview 10、今月にはpreview 11 が公開される予定になっています。(.NET MAUI ロードマップ)

Microsoft.Maui.Graphics

.NET MAUIのプロジェクトを眺めていたら、2D描画に使えそうなものがありました。Microsoft.Maui.Graphicsです。ドキュメントやソースコードを見る限り、 Native版のNativeGraphicsViewとSkia版のSkiaGraphicsViewがあるようです。ちらっと見た感じNativeの方はShape系っぽいのと、より多くのプラットフォームをサポートしているSkiaGraphicsViewを試したかったのですが、preview 10ではまだ使えないようでした。当社の要件ではサーバで描画することもあるため、Linuxをサポートしているのも魅力的です。

色々試行錯誤していたら、SkiaSharp側でMAUIに対応しているサンプルがあったのでこれを流用して試してみました。 ポリゴン数や頂点数をパラメータとして簡単に性能測定してみましたが、充分な速度が出ています。previewで更新頻度が高いせいか、何日か経って起動したらCA1416エラーが出てビルドが通らなくなっていました。具体的な性能測定結果はまた後日記載したいと思います。

インターフェースもよく抽象化されており、System.Drawing.Graphicsともよく似ているので過去の資産を活かすことができそうです。ただし、ポリゴンの描画はDrawPolygonのようなメソッドはなく、Pathを作成して自前でMoveToLineToを呼ぶ必要があるようです。DrawPointsで外周線を描画できるメソッドがありましたが、こちらは塗りつぶしができないので当社の要件では使えませんでした。

その他ラインや画像の描画も一通り試してみましたが、使用感や描画速度が十分満足できるものでした。

まとめ

.NET は6になり、今では当社でも当たり前のようにC#でクロスプラットフォーム開発しています。今後 .NET MAUI がリリースされれば、ついに長年の夢であった複雑で高性能な描画が求められる業務アプリケーションでもクロスプラットフォーム開発できる時代がくるかもしれません。今後も.NET MAUIのには注視していきたいと思います。

.NET MAUIによるクロスプラットフォーム2D描画(その2)

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA