我的程序使用 Windows API 创建一个窗口。我使用 VirtualAlloc() 函数分配一个内存区域,并使用两个 for 循环对其进行迭代,并更改每个像素的 RGB 值以覆盖整个客户端的颜色。
用 RGB 数据填充缓冲区后,我向其绘制一个矩形,再次迭代,但只是在缓冲区的特定区域中。
当缓冲区准备就绪时,函数 StretchDIBits() 将缓冲区的内容显示到屏幕上。
有没有办法将 HBITMAP 图像复制到我的缓冲区?
不幸的是,我仍然是一个初学者,我仍在自学练习和学习,所以我知道可能有很多我仍然不知道的事情,这些可能会立即回答我的问题。
使用
CreateDIBSection()
而不是 VirtualAlloc()
来分配像素缓冲区。这将为您提供 DIB 的 HBITMAP
句柄和指向 DIB 像素的原始指针。然后,您可以将 SelectObject()
放入内存 HBITMAP
中,并根据需要在 HDC
或原始缓冲区中进行绘制。要将另一个HDC
绘制到您的DIB上,请将另一个
HBITMAP
选择到另一个内存HBITMAP
中,然后根据需要将其HDC
/BitBlt()
放入您的DIB的StretchBlt()
中。然后您可以将 DIB HDC
或
StretchDIBits()
放到窗口上。