首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

使用 DirectShow 驅動攝影機擷取影像

     編輯:VC 教學

DirectShow 透過濾鏡圖管理器 (Filter Graph Manager) 連接應用層與驅動層,支援 WDM 攝影機驅動,彈性較高。本文提供最簡單的預覽實作範例。

核心 COM 介面

  • IGraphBuilder:建立濾鏡圖。
  • ICaptureGraphBuilder2:連接捕獲裝置。
  • IVideoWindow:控制影片視窗(父視窗、樣式、位置、可見)。
  • IMediaControl:控制執行/停止。
  • IMediaEventEx:事件通知(設定通知視窗)。

初始化流程

// 建立 Graph Builder 與 Capture Graph Builder
CoCreateInstance(CLSID_FilterGraph, ..., IID_IGraphBuilder, &m_pGraph);
CoCreateInstance(CLSID_CaptureGraphBuilder2, ..., IID_ICaptureGraphBuilder2, &m_pCapture);

// 介面查詢
m_pMC = m_pGraph; m_pVW = m_pGraph; m_pME = m_pGraph;

// 事件通知視窗
m_pME->SetNotifyWindow((OAHWND)hWnd, WM_GRAPHNOTIFY, 0);

// 連接捕獲建構器
m_pCapture->SetFiltergraph(m_pGraph);

// 列舉視訊輸入裝置
ICreateDevEnum -> CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm);
pEm->Next(1, &pM, &cFetched);
pM->BindToObject(0, 0, IID_IBaseFilter, &pBf);

// 加入濾鏡並渲染預覽腳位
m_pGraph->AddFilter(pBf, L"Video Capture");
m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pBf, NULL, NULL);

// 設定影片視窗
m_pVW->put_Owner((OAHWND)hWnd);
m_pVW->put_WindowStyle(WS_CHILD | WS_CLIPCHILDREN);
m_pVW->SetWindowPosition(0, 0, 320, 240);
m_pVW->put_Visible(OATRUE);

// 註冊至 Running Object Table (供 GraphEdit 遠端檢視)
GetRunningObjectTable(0, &pROT);
CreateItemMoniker(L"!", wszName, &pM);
pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, m_pGraph, pM, &m_dwGraphRegister);

程式碼簡潔,展示 DirectShow 捕獲預覽的標準流程。更進階用法(壓縮、儲存、多裝置)可在此基礎擴充。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved