C++ 如何在Windows 10下查询真实显示位深度?

C++ 如何在Windows 10下查询真实显示位深度?,c++,winapi,desktop,dxgi,C++,Winapi,Desktop,Dxgi,我正在努力寻找任何win32 api调用,以每个通道的位来正确识别连接监视器的位深度。附加的屏幕截图显示了可见的设置 使用DXGI可以枚举输出上的所有模式并轻松识别它们的位深度,但是不需要调用来获取当前模式 返回bitsPerPel的所有当前win32调用始终指示32bpp 有人知道哪个电话能得到这些数据吗?我可以通过NvAPI和ADL检测到这一点,但是没有针对基于intel的机器的解决方案 此外,我还对active signal resolution vs desktop resolution

我正在努力寻找任何win32 api调用,以每个通道的位来正确识别连接监视器的位深度。附加的屏幕截图显示了可见的设置

使用DXGI可以枚举输出上的所有模式并轻松识别它们的位深度,但是不需要调用来获取当前模式

返回bitsPerPel的所有当前win32调用始终指示32bpp

有人知道哪个电话能得到这些数据吗?我可以通过NvAPI和ADL检测到这一点,但是没有针对基于intel的机器的解决方案

此外,我还对active signal resolution vs desktop resolution字段以及如何检索这些字段感兴趣


在我看来,高级显示设置中的位深度实际上意味着每种颜色的位深度,这只是命名上的混乱。标准32位颜色为8位,分别表示红色、绿色、蓝色,其余8位用于透明度或仅用零填充。这就是为什么每个像素总是得到32位的原因。

DXGI\u OUTPUT\u DESC1
结构为您提供:

双色

类型:UINT

连接到此输出的显示器的活动导线格式的每个颜色通道的位数

DXGI_OUTPUT_DESC1结构由该方法初始化

仅举一个示例,说明您从中获得的数据类型:

--

适配器:Radeon RX 570系列 输出:\。\DISPLAY4
  • 桌面坐标:(0,0)-(38402160);3840x2160
  • 附加到桌面:1
  • 旋转:DXGI\u模式\u旋转\u标识
  • 监视器:0x000100AF
  • 物理监视器:LG ULTRA HD(显示端口)(0x00000000)

  • 每种颜色位数:10EnumDisplaySettings,使用ENUM_CURRENT_设置获取当前配置。该计算机需要重新格式化磁盘。不幸的是,win32 api调用不报告任何10位模式,而是在8位和10位情况下报告32bpp。DISPLAYCONFIG_PIXELFORMAT在报告DISPLAYCONFIG_PIXELFORMAT_NONGDI时提供了一些线索,然后与接受的答案一样,您可以使用IDXGIOutput6查询真实模式。