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后台缓冲区的主要内容,如果未能解决你的问题,请参考以下文章