Successfully reported this slideshow.
Your SlideShare is downloading. ×

System.Drawing 周りの話

Ad

System.Drawing 周りの話
【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26
copyright 2022 @masatoru 1

Ad

自己紹介
名前: 藤森 智(ふじもり さとる)

所属: 株式会社ケイ・ジェイ・システムズ代表

仕事: 古典データの検索サービスの開発

 印刷出版や電子書籍のクラウドサービス

 モバイルアプリの開発など

趣味: 料理(韓ドラ好きで韓国料...

Ad

目次
WinForms のアプリを .NET6 に移行する
Azure Functions で System.Drawing を使ってみる、ただし。。。
System.Drawing.Common パッケージ
System.Drawing 以外...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 21 Ad
1 of 21 Ad

More Related Content

System.Drawing 周りの話

  1. 1. System.Drawing 周りの話 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 1
  2. 2. 自己紹介 名前: 藤森 智(ふじもり さとる) 所属: 株式会社ケイ・ジェイ・システムズ代表 仕事: 古典データの検索サービスの開発  印刷出版や電子書籍のクラウドサービス  モバイルアプリの開発など 趣味: 料理(韓ドラ好きで韓国料理にはまってる)  走る(年間1000km、でも痩せない)  バックオフィス業務(消し込み処理が快感) Twitter: @masatoru 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 2
  3. 3. 目次 WinForms のアプリを .NET6 に移行する Azure Functions で System.Drawing を使ってみる、ただし。。。 System.Drawing.Common パッケージ System.Drawing 以外の方法 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 3
  4. 4. WinForms のアプリを .NET6 に移行する 和歌・俳句の検索システム Windows(WinForms) で動作 縦書きを System.Drawing を使って Canvas に描画 WinForms を .NET6 に移行するメリット Canvas 部分を Azure Functions で共通化 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 4
  5. 5. 縦書きを System.Drawing を使って Canvas に描画 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 5
  6. 6. WinForms を .NET6 に移行するメリット 1つの .exe ファイルで発行可能 Single-file deployment and executable <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> ... <OutputType>Exe</OutputType> <SelfContained>true</SelfContained> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> ユーザーの PC に .NET Framework のバージョンを気にする必要なし 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 6
  7. 7. System.Drawing を使って Canvas に描画 private void Form1_Paint(object sender, PaintEventArgs e) { DrawImage(e.Graphics, 500, 200); } void DrawImage(Graphics g, int width, int height) { Font fnt = new("MS UI Gothic", 50); g.DrawString("こんにちは .NET6", fnt, Brushes.Blue, 10, 50); g.DrawRectangle(new Pen(Color.DarkOrange, 10), new Rectangle(0, 0, width, height)); } 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 7
  8. 8. Canvas 部分を Azure Functions で共通化 Bitmap で描画した内容を JPEG で返す Azure Functions 実際にはページング処理をするのに XML ファイルから CosmosDB へ置き換える など描画以外で工夫している ただし。。。 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 8
  9. 9. 文字や線を Canvas に描画する using System.Drawing; Bitmap CreateImage() { Bitmap canvas = new(500, 200); var g = Graphics.FromImage(canvas); Font fnt = new("MS UI Gothic", 50); g.DrawString("こんにちは .NET6", fnt, Brushes.Blue, 0, 0); g.DrawRectangle(new Pen(Color.DarkOrange,10), new Rectangle(0, 0, canvas.Width, canvas.Height)); return canvas; } 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 9
  10. 10. System.Drawing.Common パッケージ 「.NET 6 での破壊的変更」の一つ Windows のみサポート System.Drawing の参照方法(2種類) 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 10
  11. 11. Windows のみサポート .NET6 における破壊的変更のひとつ (背景)C 言語で書かれている GDI+(libgdiplus)ライブラリの 30,000 行がテス トされていない .NET5 では Linux/Mac でもとりあえず動作していた AppService / Azure Functions では未サポート System.Drawing.Common will continue to evolve only in the context of Windows Forms and GDI+. Azure Web App sandbox 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 11
  12. 12. Windows でビルドすると警告が出力される warning CA1416: This call site is reachable on all platforms. 'Bitmap' is only supported on: 'windows'. <TargetFramework>net6.0-windows</TargetFramework> で警告を消去可能 Linux では実行時にエラー(ビルドはできる) The type initializer for 'Gdip' threw an exception. System.Drawing.Common is not supported on non-Windows platforms. Linux でも .NET Runtime configuration settings で "System.Drawing.EnableUnixSupport": true とすれば .NET6 でも動作する(とド キュメントにはあるが試した限りでは動作しない) .NET 7 ではこのスイッチは削除される 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 12
  13. 13. System.Drawing.Common の参照方法(2種類) .NET Platform Extensions <PackageReference Include="System.Windows.Extensions" Version="6.0.0" /> または <PackageReference Include="System.Drawing.Common" Version="6.0.0" /> Windows Desktop <TargetFramework>net6.0-windows</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <UseWPF>true</UseWPF> 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 13
  14. 14. System.Drawing 以外の方法 System.Drawing の代替手段 ImageSharp SkiaSharp Microsoft.Maui.Graphics Linux での環境構築のハードル高め パッケージをインストールすれば動くというわけではない。 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 14
  15. 15. ImageSharp A modern, cross-platform, 2D Graphics library for .NET 商用サポートあり 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 15
  16. 16. SkiaSharp SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile, server and desktop models to render images. Building on Linux <PackageReference Include="SkiaSharp" Version="2.88.1" /> <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.1" /> <PackageReference Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1" /> 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 16
  17. 17. Microsoft.Maui.Graphics An experimental cross-platform native graphics library. Goals No dependencies on System.Drawing Support all graphics operations within an abstraction that the underlying abstraction supports. モバイルやアプリ向け(サーバー向けでは無い?) Font が効かない  canvas.Font = new Font("MS UI Gothic", 50); https://github.com/dotnet/Microsoft.Maui.Graphics/issues/451 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 17
  18. 18. 参考資料 .NET 6 での破壊的変更 単一ファイルの配置と実行可能ファイル System.Drawing.Common が Windows でしかサポートされない Make System.Drawing.Common only supported on Windows Win32k.sys (User32/GDI32) Restrictions github: Microsoft.Maui.Graphics Maui.Graphics 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 18
  19. 19. この資料のサンプルコード: https://github.com/masatoru/CreateImageFunctionsSample 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 19
  20. 20. まとめ System.Drawing は Windows 専用 System.Drawing は App Service では未サポート。動かないというわけではない System.Drawing の移行先として3つある。MAUI に期待だけど現状は Skia か。 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 20
  21. 21. ご清聴ありがとうございました。 【オンライン】.NET 6 移行祭り! C# Tokyo イベント 2022.8.26 copyright 2022 @masatoru 21

×