• ベストアンサー

C# PictureBox について

C#のPictureBoxにビットマップを表示させようとしています。 取得元のビットマップはC++のDll内でDirectShowでキャプチャしたもので、ヘッダー情報付きビットマップへのbyteポインタを返却させています。 C#側でunsafeブロックを用いてポインタ自体は取得できておりますが、次のステップとして、これをC#のPictureBoxに貼りつけるためにはどうすれば良いのか分からず、苦戦しております。 画像の大きさやバイト数は前もって分からないことが前提となっております。 C#が初心者に近いこともあり、セオリーでない方法かもしれませんが、ご教授頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

unsafeな世界で頑張る理由がちょっとわからないので… DicrectShowで画像をくみたてているなど必然性があるのを前提に回答すると、 変数pointerにpointerが入っているとして、 メモリをバイト配列にコピーして、 http://msdn.microsoft.com/ja-jp/library/28k1s2k6(v=vs.80).aspx Copy(pointer, 0, bytes, 0, size); //サイズは後述 Streamを組み立てて、 Stream stream = new Stream(); stream.Read(bytes, 0, size); 以下の例を下にPictureBoxにビットマップを表示させる。 http://msdn.microsoft.com/ja-jp/library/z7ha67kw(v=vs.80).aspx 上記URLのresponseStreamは、streamになります。 ここで読むこむべきサイズが必要なのですが、ヘッダ情報付きビットマップなので、サイズはヘッダの中に入っています。 System.Uint32 bfsize = (System.UInt32)((BITMAPINFOHEADER)(*pointer))->bfSize; size = (int)bfsize; ※扱える範囲はintです。 BITMAPINFOHEADER 構造体を参考に回答 http://msdn.microsoft.com/ja-jp/library/cc352308.aspx

narrow_sky
質問者

お礼

Dll側からはポインタだけでなく、ビットマップのバイト数も知らせるようにし、UnmanagedMemoryStreamオブジェクトでいけました。 ヒントになる情報ありがとうございました!

関連するQ&A