對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!
用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。directshow通過圖形過濾管理器(filter graph manager)來與上層應用程式和下層的驅動進行聯絡。directshow通過一種叫作捕獲過濾器(capture filter)的東東來支援對攝像頭的捕獲,乙個捕獲過濾器有多個插口(pin),其中的預覽(preview)插口可用來進行顯示禎圖象。
directshow
下面是例程:
ccomqiptrm_pvw;
ccomqiptrm_pmc;
ccomqiptrm_pme;
ccomptrm_pgraph;
ccomptrm_pcapture;
dword m_dwgraphregister;
bool
binit(hwnd hwnd)
else
//將裝置新增到graph
hr = m_pgraph->addfilter(pbf, l"video capture");
if (failed(hr))
return
false;
//連線乙個源插口
hr=m_pcapture->renderstream(&pin_category_preview,&mediatype_video
,pbf,null,null);
if (failed(hr))
return
false;
pbf.release();
// //
hr=m_pvw->put_owner((oahwnd)hwnd);
if (failed(hr))
return
false;
//設定視窗樣式
m_pvw->put_windowstyle(ws_child | ws_clipchildren);
if (failed(hr))
return
false;
//設定視窗大小
crect rectclient;
getclientrect(hwnd,rectclient);
m_pvw->setwindowposition(0, 0, 320, 240);
//設定可視
hr=m_pvw->put_visible(oatrue);
if (failed(hr))
return
false;
//將物件加入到執行物件列表中
ccomptrprot;
getrunningobjecttable(0,&prot);
wchar c[128];
wsprintfw(c, l"filtergraph %08x pid %08x/0", (dword_ptr)m_pgraph.p,
getcurrentprocessid());
hr = createitemmoniker(l"!",c,&pm);
if (failed(hr))
return
false;
hr = prot->register(rotflags_registrationkeepsalive,m_pgraph,
pm,&m_dwgraphregister);
pm.release();
return
false;
}
使用DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...
使用DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...
使用DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...