1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.NET Core でマルチメディアファイル(.bmp, .wav)を簡単に出力する方法

Last updated at Posted at 2023-07-01

はじめに

.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# プログラミングが始めてだったので練習を兼ねて作ってみた感じです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?