DirectShow中列舉攝像頭解析度
阿新 • • 發佈:2019-02-18
最近沒有寫程式,主要在做一些文字工作,轉發一下以前自己寫的一個關於攝像頭列舉的問題吧
講講DirectShow中列舉攝像頭的採集解析度,這是看程式碼得來的資訊。查這方面的資料確實不太方便,找了好久都沒有找到。在這裡大部分是寫的程式碼,裡面如果有錯誤請聯絡本人。。。嘿嘿。。。 用一個函式來完成得到攝像頭的採集解析度: #include"SmartPtr.h" // 這個標頭檔案參考Windows SDK裡面DirectShow部分的程式碼,裡面有這個標頭檔案 #include<dshow.h> #include<fstream> HRESULT GetCaptureRatio(IBaseFilter* pCapFilter, ICaptureGraphBuilder2* pBuild) { HRESULT hr; SmartPtr<IAMStreamConfig> pam; hr = pBuild->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pCapFilter, IID_IAMStreamConfig, reinterpret_cast<void**>(&pam)); // 得到媒體控制介面 int nCount = 0; int nSize = 0; hr = pam->GetNumberOfCapabilities(&nCount, &nSize); ofstream outfile("capturesize.txt"); // 準備寫入檔案 // 判斷是否為視訊資訊 if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == nSize) { for (int i=0; i<nCount; i++) { VIDEO_STREAM_CONFIG_CAPS scc; AM_MEDIA_TYPE* pmmt; hr = pam->GetStreamCaps(i, &pmmt, reinterpret_cast<BYTE*>(&SCC)); if (pmmt->formattype == FORMAT_VideoInfo) {VIDEOINFOHEADER* pvih = reinterpret_cast<VIDEOINFOHEADER*>(pmmt->pbFormat); int nwid = pvih->bmiHeader.biWidth; // 得到採集的寬
int nhei = pvih->bmiHeader.biHeight; // 得到採集的高
outfile << nwid << " * " << nhei << endl; // 寫入檔案 } } } outfile.close(); // 關閉檔案 reture(hr); }