Winapi 深颜色(每个通道10位+)在Win32中是如何工作的?

Winapi 深颜色(每个通道10位+)在Win32中是如何工作的?,winapi,colors,Winapi,Colors,我的电脑上没有任何支持深颜色的硬件,所以我无法自己进行实验,在线搜索“win32深颜色”或“win32 10位颜色”(或30位、48位或64位)不会产生任何相关或最新的结果。最重要的结果仍然是2009年的NVIDIAPDF:-它描述了使用OpenGL和NVIDIAAPI显示每个通道超过8位的图像 我理解使用OpenGL是如何允许显示30位彩色图像的:它有效地绕过了操作系统,OpenGL表面在GPU上以深彩色渲染,并通过DisplayPort或HDMI以适当的格式直接发送到监视器 但是除了Open

我的电脑上没有任何支持深颜色的硬件,所以我无法自己进行实验,在线搜索“win32深颜色”或“win32 10位颜色”(或30位、48位或64位)不会产生任何相关或最新的结果。最重要的结果仍然是2009年的NVIDIAPDF:-它描述了使用OpenGL和NVIDIAAPI显示每个通道超过8位的图像

我理解使用OpenGL是如何允许显示30位彩色图像的:它有效地绕过了操作系统,OpenGL表面在GPU上以深彩色渲染,并通过DisplayPort或HDMI以适当的格式直接发送到监视器

但是除了OpenGL还有哪些选项呢

在Win32中,使用
CreateWindow
创建窗口后,通过处理
WM_PAINT
消息,然后调用
BeginPaint
来渲染该窗口,这将为GDI设备上下文提供一个句柄,该句柄不能超过32bpp(每个通道8位)

虽然GDI表面上抽象了渲染设备的实现细节,包括颜色深度,但不可能指定10bpp的RGB值,例如(
COLORREF
struct被硬编码为使用32位(8bpp)
DWORD
值),这是一个泄漏的抽象

这是否意味着不可能使用处理
WM_PAINT
的程序在Windows桌面上显示30bpp/深颜色的内容,并且OpenGL是唯一的方法


如果您试图从内存中的OpenGL渲染缓冲区返回窗口表面,会发生什么情况?(即,如果在BD播放机中显示深颜色BluRay光盘或在Photoshop中显示30位内容时按PrintScreen会发生什么情况?

GDI是,咳嗽,功能完成。DirectX和Direct2D支持的像素格式为。请注意R10G10B10格式。您可以创建一个窗口,而无需分配客户端区域表面(这就是扩展窗口样式的用途),并在适当位置创建自己的DirectX交换链。这允许您仍然根据
WM_PAINT
消息进行渲染,尽管不是在从
BeginPaint
返回的设备上下文中(您仍然需要调用它来验证客户端区域,以获取需要重新绘制的脏区域)。在这种设置下,命中测试也可以工作。@IInspectable谢谢您的链接。我注意到,如果你使用非重定向位图,那么你不会得到任务栏缩略图-有办法解决这个问题吗?在你创建DirectX交换链后,它会显示缩略图预览吗?如果仍然不行,我想你必须提供你自己的。我还没有玩过这个,但我相信你可以处理消息并打电话回应,提供定制的现场预览。复制一个合适的窗口表示似乎很乏味,而且有些不平凡。