重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

C#が初心者に近いこともあり、セオリーでない方法かもしれませんが、ご教授頂ければ幸いです。

A 回答 (1件)

unsafeな世界で頑張る理由がちょっとわからないので…


DicrectShowで画像をくみたてているなど必然性があるのを前提に回答すると、

変数pointerにpointerが入っているとして、

メモリをバイト配列にコピーして、
http://msdn.microsoft.com/ja-jp/library/28k1s2k6 …

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 …
上記URLのresponseStreamは、streamになります。

ここで読むこむべきサイズが必要なのですが、ヘッダ情報付きビットマップなので、サイズはヘッダの中に入っています。

System.Uint32 bfsize = (System.UInt32)((BITMAPINFOHEADER)(*pointer))->bfSize;
size = (int)bfsize;

※扱える範囲はintです。

BITMAPINFOHEADER 構造体を参考に回答
http://msdn.microsoft.com/ja-jp/library/cc352308 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/24 18:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!