
C#のPictureBoxにビットマップを表示させようとしています。
取得元のビットマップはC++のDll内でDirectShowでキャプチャしたもので、ヘッダー情報付きビットマップへのbyteポインタを返却させています。
C#側でunsafeブロックを用いてポインタ自体は取得できておりますが、次のステップとして、これをC#のPictureBoxに貼りつけるためにはどうすれば良いのか分からず、苦戦しております。
画像の大きさやバイト数は前もって分からないことが前提となっております。
C#が初心者に近いこともあり、セオリーでない方法かもしれませんが、ご教授頂ければ幸いです。
No.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 …
Dll側からはポインタだけでなく、ビットマップのバイト数も知らせるようにし、UnmanagedMemoryStreamオブジェクトでいけました。
ヒントになる情報ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
コンストラクタでnewを失敗した...
-
Run-Time Check Failure #3とい...
-
ハンドルはポインタか
-
CopyMemory()をmemcpy()に書き...
-
戻り値で構造体を返すことは可...
-
関数の引数をvoid*でキャストする
-
VB6でのgethostbyaddrの使用方...
-
NULLポインタが0でない処理系と...
-
ハンドル、アドレス、ポインタ...
-
CWnd::EnableWindow()の扱い方
-
アドレス値はどの型にキャスト...
-
基本アルゴリズムの『返す』の...
-
fopne で失敗する原因
-
構造体を値で渡す良い点はあり...
-
参照型で受け取った引数をポイ...
-
アプリを32bitから64bit移行
-
スコープ外でのアドレスの参照...
-
c言語で任意のファイルから読み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
セグメントエラー
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
参照型で受け取った引数をポイ...
-
トリプルポインタが必須!とな...
-
ハンドルはポインタか
-
LPSTR型の初期化について
-
ポインターの使用法や利点
-
ポインタについて
-
c言語で任意のファイルから読み...
-
基本アルゴリズムの『返す』の...
-
コンストラクタでnewを失敗した...
-
ハンドル、アドレス、ポインタ...
-
アプリを32bitから64bit移行
-
デバイスハンドルとは?
-
NULLとブランクの違い
おすすめ情報