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

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