unsigned short型配列からBitmapを作る

ありふれたネタかもしれませんが、コミュニティでそれらしい質問が上がっていたのでざっと書いてみました。

http://wp.me/a19AcI-5U
(Visual Studio 2010 / .NET 4 プロジェクト)

鍵となるのは Bitmap クラス、BitmapData クラスです。(WriteUInt16ToIndexed8Bitmap や WriteUInt16ToRgb24Bitmap あたり)
Bitmap クラスをサイズ・ピクセルフォーマットを指定してインスタンスを生成し、そのインスタンスの LockBits メソッドで書き込み先のメモリを用意します。
このメモリに必要な変換を書けたデータを 1 bytes / pixel や 3 bytes / pixel で Marshal.Copy や unsafe のポインタで書き込んで、UnlockBits メソッドで閉じるだけ。

ただし、Format8bppIndexed の場合はカラーパレットの設定も必要なのでお忘れなく。

※上記サンプルを .NET 3.5 以前で実行する場合、currentPointer 変数周りでコンパイルエラーになりますので、一旦 long 型にキャストして足し算してから、IntPtr 型にキャストし直してください。(currentPointer = (IntPtr)((long)currentPointer + stride); みたいな形)