2017-03-29 71 views
0

noob問題: 如何從連接的相機獲取參數的任何示例,例如支持的分辨率?DirectX 9 - 獲取相機分辨率? (C++)

我使用的是2010年的DirectX月 代碼來創建一個設備:

HWND     m_hwnd; 
HDC      *phdc; 
IDirect3D9    *m_pD3D; 
IDirect3DDevice9  *m_pDevice; 
IDirect3DSwapChain9  *m_pSwapChain; 

HRESULT DrawDevice::CreateDevice(HWND hwnd) 
{ 
    if (m_pDevice) 
    { 
     return S_OK; 
    } 

    // Create the Direct3D object. 
    if (m_pD3D == NULL) 
    { 
     m_pD3D = Direct3DCreate9(D3D_SDK_VERSION); 

     if (m_pD3D == NULL) 
     { 
      return E_FAIL; 
     } 
    } 


    HRESULT hr = S_OK; 
    D3DPRESENT_PARAMETERS pp = { 0 }; 
    D3DDISPLAYMODE mode = { 0 }; 

    hr = m_pD3D->GetAdapterDisplayMode(
     D3DADAPTER_DEFAULT, 
     &mode 
    ); 

    if (FAILED(hr)) { return hr; } 

    hr = m_pD3D->CheckDeviceType(
     D3DADAPTER_DEFAULT, 
     D3DDEVTYPE_HAL, 
     mode.Format, 
     D3DFMT_X8R8G8B8, 
     TRUE // windowed 
    ); 

    if (FAILED(hr)) { return hr; } 

    pp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    pp.SwapEffect = D3DSWAPEFFECT_COPY; 
    pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
    pp.Windowed = TRUE; 
    pp.hDeviceWindow = hwnd; 

    hr = m_pD3D->CreateDevice(
     D3DADAPTER_DEFAULT, 
     D3DDEVTYPE_HAL, 
     hwnd, 
     D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_FPU_PRESERVE, 
     &pp, 
     &m_pDevice 
    ); 

    if (FAILED(hr)) { return hr; } 

    m_hwnd = hwnd; 
    m_d3dpp = pp; 


    return hr; 
} 

我的目的是給用戶的選項選擇列表...

謝謝!

回答

0

那麼如果你需要監視器的決議,你應該使用DXUT微軟GUI庫或QT或自定義你應該使枚舉類型和聲明屏幕分辨率。我不知道你喜歡什麼樣的決議。

P.S.我不確定您是否會成功使用DX SDK 2010年6月版,以及是否使用最新的Windows和Visual Studio IDE。微軟不再支持這種類型的DirectX SDK。您應該至少使用Windows SDK版本的Windows SDK。希望這可以幫助。

+0

我不需要顯示器分辨率,但要獲得連接的相機支持的分辨率。 我有一個運行良好的項目,在Windows 7上的SDK 2010,Visual Studio 2015. 只需要弄清楚如何從相機獲取參數:) – Jahrk

0

Direct3D用於呈現給顯示器,而不是從相機捕獲圖像。根據您使用的操作系統版本,您應該查看Media Foundation或傳統DirectShow

與過去的DirectX SDK一樣,Direct3D 9本身也被棄用。請參閱MSDNthis post。新項目應該使用DirectX 11(或者在Windows 10/Xbox One上應該考慮使用DirectX 12的非常有經驗的Direct3D圖形開發人員)。

對於Win32桌面應用程序,您應該查看GitHub上的此示例。

對於通用Windows平臺(UWP)應用程序,您應該查看GitHub上的此示例。

+0

感謝您的答案,它似乎像媒體基金會不適用於Windows 7,而DirectShow對我來說還不夠好。 也許我會看看DirectX11,但無論如何,同樣的問題也適用於它。 – Jahrk

+0

這取決於您使用的Media Foundation的哪些方面。有關DirectX的詳細信息,請參閱[DirectX 11.1和Windows 7更新](https://blogs.msdn.microsoft.com/chuckw/2013/02/26/directx-11-1-and-windows-7-update/) 11.1包含DirectX 11視頻和一些相關Media Foundation更改的運行時。 –