System.Drawing.Common が Windows 固有のライブラリに
.NET 6 での breaking change(破壊的変更) で、System.Drawing.Common
が、Windows 固有のライブラリと位置付けられました。Windows 以外の OS では、デフォルトの設定では、動作しなくなりました。ただし、ランタイム構成を変更すれば、動作するようです。
.NET 7 では、windows 以外のサポートが完全に廃止されています。.NET 6 のサポート終了は、2024 年 11 月 12 日 なので、Windows 以外の環境で、System.Drawing.Common
を使用している場合は、それまでに移行が必要となります。Windows のみで利用している場合は、問題ありません。
WSL や Azure App Service on Linux で動作するアプリケーションで、System.Drawing.Common
を利用している場合は、移行が必要となります。
System.Drawing.Common の代替
System.Drawing.Common
の代替として、公式ドキュメントには、以下のライブラリへの移行が推奨されています。
以下は、2017 年の記事ですが、ImageSharp, SkiaSharp について触れられています。
この 2017 年時点での選択肢としてなかったのは、Microsoft.Maui.Graphics
で、Microsoft.Maui.Graphics の名前空間で API が抽象化されて、それぞれの OS 向けに実装が提供されています。SkiaSharp での実装も Microsoft.Maui.Graphics.Skia
として提供されています。
- https://github.com/dotnet/Microsoft.Maui.Graphics#supported-platforms
- https://github.com/dotnet/Microsoft.Maui.Graphics/tree/main/src/Microsoft.Maui.Graphics.Skia
現時点では、Linux をサポートしている実装は、Microsoft.Maui.Graphics.Skia
のみのようです。
Microsoft.Maui.Graphics サンプル コード
コンソール アプリで、図形を描画して、画像として出力するサンプルを書いてみます。
Nuget から、以下のライブラリをインストールしてください。
- Microsoft.Maui.Graphics
- Microsoft.Maui.Graphics.Skia
コード例は以下です。
internal class Program
{
static void Main(string[] args)
{
int imageWidth = 400;
int imageHeigth = 400;
float displayScale = 1.0f;
// コンテキストの生成
BitmapExportContext bitmapExportContext =
new SkiaBitmapExportContext(imageWidth, imageHeigth, displayScale);
// キャンバスの取得
ICanvas canvas = bitmapExportContext.Canvas;
// 背景の塗りつぶし
canvas.FillColor = Colors.White;
canvas.FillRectangle(0, 0, imageWidth, imageHeigth);
// 円の描画
canvas.FillColor = Colors.Black;
canvas.FillCircle(imageWidth / 2f, imageHeigth / 2f, 160f);
canvas.FillCircle(imageWidth / 4f, imageHeigth / 4f, 60f);
canvas.FillCircle(imageWidth - (imageWidth / 4f), imageHeigth / 4f, 60f);
// 文字列の描画
string label = "Hello, Maui.Graphics!";
canvas.FontColor = Colors.White;
canvas.FontSize = 26;
canvas.DrawString(label,
0, 0,
imageWidth, imageHeigth,
HorizontalAlignment.Center, VerticalAlignment.Center);
// png ファイルとして出力
bitmapExportContext.WriteToFile("mauiGraphicsDemo001.png");
}
}
このコードを実行すると、プログラムの出力ディレクトリに、以下の画像が出力されます。
Linux 上で動作させるには?
プログラムの出力ディレクトリ以下の runtimes ディレクトリを見ると分かるのですが、Linux 向けのネイティブ ライブラリが配置されていません。
Nuget から、以下のライブラリをインストールしてください。
- SkiaSharpNativeAssets..Linux.NoDependencies
ライブラリ インストール後、ビルドすると、Linux 向けのライブラリが配置されます。
これで、WSL でも動作するようになります。 今回は、コンソールアプリでのコード例ですが、同様のコードを Azure App Service on Linux でも動作させることができます。
コメント (0)
コメントの投稿