2017-03-29 70 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更改的运行时。 –