1. 程式人生 > >DirectShow中列舉攝像頭解析度

DirectShow中列舉攝像頭解析度

最近沒有寫程式,主要在做一些文字工作,轉發一下以前自己寫的一個關於攝像頭列舉的問題吧

講講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); }