VC++ 2008でフォームアプリケーションタイプでAVIからDIBを取得しピクチャーボックスに表示するには?

解決


BASC  2009-12-23 16:38:02  No: 71205  IP: [192.*.*.*]

現在,VC++ 2008でフォームアプリケーション動作を目指して,AVIからBMPを抜き出しピクチャーボックスに張ろうとしています.
この掲示板やhttp://codezine.jp/article/detail/210こちらのほうでコンソールタイプで記述されている方がいますが,それをうまいことフォームアプリケーションに移せません.
特に,BMPINFOHEADERまでの情報が渡せず困っています.
今までVBしかつかったことがなかったのでVCの組み方すら危うい感はあるのですが,ご教授していただけると助かります.

編集 削除
subaru  2009-12-23 22:01:33  No: 71206  IP: [192.*.*.*]

フォームアプリケーションで作成しているということは
欲しいのは System::Drawing::Image でしょうか?

BITMAPFILEHEADER を付加して一旦 System::IO::MemoryStream に書き込み、
System::Drawing::Image::FromStream で読み込むのが楽かもしれません。

編集 削除
BASC  2009-12-24 10:37:06  No: 71207  IP: [192.*.*.*]

その場合,DIBからpictureboxに書き込むよりも早く動作するでしょうか?

現在,BMPINFOFILEHEADERにAVIのフレーム情報を組み込めましたが,
それをpictureboxに描きだそうとするときのハンドル取得で止まっています.
SetDIBitsToDevice(hdc,略)の箇所ですね.

もうちょっと調べてみたいと思います.

編集 削除
BASC  2009-12-24 11:24:58  No: 71208  IP: [192.*.*.*]

bmpInfo = (BITMAPINFOHEADER *)AVIStreamGetFrame(AviFrame,0);
HWND hWnd;
hWnd = reinterpret_cast< HWND >( pictureBox1->Handle.ToPointer());
hDC = GetDC(hWnd);
SetDIBitsToDevice(hDC,0,0,bmpInfo->biWidth,bmpInfo->biHeight,0,0,0,bmpInfo->biHeight,bmpInfo+1,(BITMAPINFO *)bmpInfo,DIB_RGB_COLORS);

このようにしてpictureboxからハンドルをもらい,そこに描画しようとしているのですが,未解決のトークン,未解決の外部シンボルでエラーが帰ってきます.
根本的に間違っているのでしょうか?

編集 削除
BASC  2009-12-24 12:17:14  No: 71209  IP: [192.*.*.*]

すいません,解決しました.
http://bluenotes.justblog.jp/technote/2009/09/vc2005fatal-err.html
が参考となりました.
お時間とらせてしまし申し訳ありません.

編集 削除