はじめに
.NET Core でとあるプログラムを作っていて映像をファイルで出力したくなり、標準の System.Drawing.Bitmap
クラスを使ってみたところ、
: error CS1069: 型名 'Bitmap' は名前空間 'System.Drawing' に見つかりませんでした。
この型はアセンブリ 'System.Drawing.Common, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' に転送されました。
このアセンブリへの参照を追加することを検討してください
というエラーが出てきて「え、標準で使えないの!?」と思いドキュメントを確認したところ、
注意事項に、
注意
.NET 6 以降のバージョンでは、この種類を含む System.Drawing.Common パッケージは Windows オペレーティング システムでのみサポート されています。 クロスプラットフォーム アプリでこの型を使用すると、コンパイル時の警告と実行時例外が発生します。 詳細については、「 Windows でのみサポートされる System.Drawing.Common」を参照してください。
との記載が。
私の環境は macOS + .NET Core 7.0 なのでそもそも Bitmap クラスが使えないようです。
なんてこったい...
作ってみた
という訳で、bmpファイルを簡単に出力できる独自クラスを作ってみました。
.bmp ファイル出力
使い方は恐ろしく簡単で、幅と高さを指定して SimpleBitmap
クラスのインスタンス生成後、SetPixel
で点を打ち、WriteFile
でファイルに書き出すことができます。
SimpleBitmap bmp = new SimpleBitmap(width, height);
bmp.SetPixel(x, y, red, green, blue); // red, green, blue = 0~255
bmp.WriteFile("/path/to/graphic.bmp");
.wav ファイル出力
ついでに、音声を無圧縮のリニア形式のwavファイルとして出力できるモノも作ってみました。
SimpleWave wav = new SimpleWave(44100, 16, 2); // sampling-rate, bit-rate, channels
wav.Append(pcm); // append byte array
wav.WriteFile("/path/to/sound.wav");
補足
既に同じような機能を実現できるライブラリがあるとは思いますが、C# プログラミングが始めてだったので練習を兼ねて作ってみた感じです。