掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CreateDIBSectionについて (ID:56563)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちは。山岡です。 現在私は、DirectShowのサンプル'StillCap'を 元にしてビデオカメラからの画像をとりこみ、 静止画として保存する アプリケーションを作成しています。 当初、カメラからの画像はRGB24形式で取り込んでいましたが、 IMediaControl->Run()の実行時に CPU使用率が100%になってしまった為、 RGB24形式からYUY2形式で取り込むよう変更しました。 以下のような感じです。 ---------------------------------------- //メディアタイプ設定 CMediaType VideoType; VideoType.SetType( &MEDIATYPE_Video ); VideoType.SetSubtype( &MEDIASUBTYPE_RGB24);<--この部分をYUY2に変更しました hr = pISampleGrabber->SetMediaType( &VideoType ); ----------------------------------------- しかし、YUY2にすると静止画を格納する為のバッファを準備する部分で 問題が発生してしまいます。 ----------------------------------------- AM_MEDIA_TYPE mt; hr = m_pGrabber->GetConnectedMediaType(&mt); if (szCapBitmap != NULL) { DeleteObject(szCapBitmap); } VIDEOINFOHEADER *pVideoHeader; pVideoHeader = (VIDEOINFOHEADER*)mt.pbFormat; ZeroMemory(&szBmInfo, sizeof(szBmInfo)); CopyMemory(&szBmInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER)); szCapBitmap = CreateDIBSection(0, &szBmInfo, DIB_RGB_COLORS, &m_pBmpBuffer, NULL, 0); ----------------------------------------------------------- こんな感じでバッファの準備をし、CreateDIBSectionにより 生成されたビットマップのハンドルを得ようとしているのですが、 NULLが帰ってきてしまいます。 直後にGetLastError()を実行しても、「正常に終了しました」といった コードしか得られないため、なにがいけないのかが良くわからないのです。 MEDIASUBTYPE_RGB24からMEDIASUBTYPE_YUY2に変更したのが大元の原因 であるとは思うのですが。 どなたか、CMediaType.SetSubtypeにMEDIASUBTYPE_YUY2をセットした場合の ビットマップのハンドルの取得の仕方をご存知でしょうか。 ご存知でしたら何卒ご教授いただきたく思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.