DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DibをBitmapに変換したい

環境/言語:[Windows Server2003 C#]
分類:[.NET]

byte[]型のバッファにDib画像データを格納しています。
このデータをPictureBoxに表示するにはどうすればよいのでしょうか?
Bitmap型に変換できればPictureBox.Imageにセットできるのですが・・
ヘルプでDibを検索するとDataFormatsクラスというのが出てきたので
調べてみたんですが、使い方がいまいち分からないんです。

DataObject obj = new DataObject(DtaFormats.Dib, buf);
Bitmap bmp = new Bitmap((Bitmap)obj.GetData("System.Drawing.Bitmap"));

このようにしてみたんですが、コンパイルは通りますが、
動かすと、オブジェクト参照がオブジェクトインスタンスに設定されていません。
となってしまいます。
どなたかアドバイスよろしくお願いいたします。
こんばんは、どんひょくさん。ピラルクです。

Image.FromStream(
ではないでしょうか。これはStreamを引数に要求するので、
すでにByte配列になってしまっている(?)なら、
MemoryStreamを経由させるとかでしょうか。
■No2879に返信(ピラルクさんの記事)
おはようございます。ピラルクさん。

> Image.FromStream(
> ではないでしょうか。これはStreamを引数に要求するので、
> すでにByte配列になってしまっている(?)なら、
> MemoryStreamを経由させるとかでしょうか。

すみません。表現が足りませんでした。
データの中身としては、BITMAPINFOHEADER+カラーテーブル+DIBビットイメージ
が入っています。(つまりBITMAPFILEHEADERが無い)
このデータのままBITMAPの引数にすると実行時にエラーになるので、今は自分でファイルサイズ等を計算して、BITMAPFILEHEADERを作成し、現在のデータの上に追加させて
Bitmapの引数に渡しています。
これを手作業ではなく、何かのクラスのメソッドなどで何とかならないかな?
と思っているのですが・・・そこで型変換らしきDataObjectクラスかな?と・・・

BMPFILEHEADER(BMPファイルヘッダー)の付いていないDIBを表示する何か
良い方法をご存知ないでしょうか?
こんばんは、どんひょくさん。ピラルクです。

ちょっと調べていましたが、ここで同じような質問をしているような人がいました。
http://www.dotnet247.com/247reference/msgs/31/159805.aspx

Bitmapオブジェクトを先に作ってLockBits()して、
BitmapDataのScan0をごにょごにょ……パレットがあるならbmp.Paletteも……。
これだと手作業がさらに増えそうですね。(^^;

DOBON.NET | プログラミング道 | プログラミング掲示板