掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DirectShowで動画を表示するには? (ID:59330)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VC++6.0でUSBカメラからの画像を取得しています。 そのプログラムをDLL化して、VBで表示できるようにしたいのですが、 新しいWindowが開いてしまいます。 VBのフォーム上に画像を表示させることはできないのでしょうか? _declspec(dllexport) int preview() { IGraphBuilder *pGraphBuilder; ICaptureGraphBuilder2 *pCaptureGraphBuilder2; IMediaControl *pMediaControl; // 補足情報)英単語の日本語訳 // Enumerate : 列挙、一覧 // Moniker : あだ名 ICreateDevEnum *pCreateDevEnum = NULL; IEnumMoniker *pEnumMoniker = NULL; IMoniker *pMoniker = NULL; ULONG nFetched = 0; IBaseFilter *pDeviceFilter; // COMを初期化 CoInitialize(NULL); // FilterGraphを生成 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder); // CaptureGraphBuilder2というキャプチャ用GraphBuilderを生成する CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (LPVOID *)&pCaptureGraphBuilder2); // FilterGraphをセットする pCaptureGraphBuilder2->SetFiltergraph(pGraphBuilder); // MediaControlインターフェース取得 pGraphBuilder->QueryInterface(IID_IMediaControl, (LPVOID *)&pMediaControl); // デバイスを列挙するためのCreateDevEnumを生成 CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (PVOID *)&pCreateDevEnum); // VideoInputDeviceを列挙するためのEnumMonikerを生成 pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumMoniker, 0); if (pEnumMoniker == NULL) { // 接続された映像入力デバイスが一つも無い場合にはこのif文に入ります printf("no device\n"); return 0; } // EnumMonikerをResetする // Resetすると、先頭から数えなおします pEnumMoniker->Reset(); // 最初のMonikerを取得 pEnumMoniker->Next(1, &pMoniker, &nFetched); // MonkierをFilterにBindする pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pDeviceFilter ); // FilterGraphにデバイスフィルタを追加する pGraphBuilder->AddFilter(pDeviceFilter, L"Device Filter"); // この時点でMoniker系、Enumerate系は用済み pMoniker->Release(); pEnumMoniker->Release(); pCreateDevEnum->Release(); // Graphを生成する pCaptureGraphBuilder2->RenderStream(&PIN_CATEGORY_PREVIEW, NULL, pDeviceFilter, NULL, NULL); // 再生開始 pMediaControl->Run(); // 再生中にプログラムが終わってしまわないように MessageBox(NULL, "Block Execution", "Block", MB_OK); // 資源を解放 pMediaControl->Release(); pCaptureGraphBuilder2->Release(); pGraphBuilder->Release(); // COM終了 CoUninitialize(); return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.