Win32中的RGB后台缓冲区

Posted

技术标签:

【中文标题】Win32中的RGB后台缓冲区【英文标题】:RGB back buffer in Win32 【发布时间】:2008-11-11 15:46:28 【问题描述】:

我有一个 RGB 值数组,我可以保证其大小与屏幕上窗口的客户区相匹配。

使用 Win32 API,为了响应 WM_PAINT 消息,在屏幕上获取我的数组内容的最简单和最快的方法是什么?

如果它更简单/更快,我们可以假设它是 32 位显示器,并且数组的每个元素都是 32 位。

【问题讨论】:

【参考方案1】:

如果您可以完全控制支持格式,请使用 DIB 格式和虚拟 BITMAPINFO 结构。然后使用SetDIBitsToDevice复制到DC。

注意DIB格式的特殊性——每一行都要扩展为4字节的倍数,缓冲区的第一行是图像的底行,字节顺序是蓝、绿、红.

【讨论】:

【参考方案2】:

使用 BitBlt

【讨论】:

我想我真的在问如何从我的阵列中获取一个可以 blit 的 DC,因为 BitBlt 需要一个源 DC 首选 SetDIBitsToDevice(),但您使用“HDC hdc = GetDC(hwnd); HDC hdcBitmap = CreateCompatableDC(hdc); ReleaseDC(hdc); DeleteObject(SelectObject(hdcBitmap, hBitmap));”在你的初始化中。 DeleteObject() 释放 1x1@1bpp 默认位图。

以上是关于Win32中的RGB后台缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

在Win32中等待串行传输完成

Win32 进程间通信分配

如何从 Linux 帧缓冲区获取 RGB 像素值?

win32 C++项目中的输入超时

调配 32 位 alpha 通道所需的 Intel 内在函数

如何从窗口获取像素数据\像素缓冲区并提取RGB?