如何将位图复制到我的窗口缓冲区?

问题描述 投票:0回答:1

我的程序使用 Windows API 创建一个窗口。我使用 VirtualAlloc() 函数分配一个内存区域,并使用两个 for 循环对其进行迭代,并更改每个像素的 RGB 值以覆盖整个客户端的颜色。

用 RGB 数据填充缓冲区后,我向其绘制一个矩形,再次迭代,但只是在缓冲区的特定区域中。

当缓冲区准备就绪时,函数 StretchDIBits() 将缓冲区的内容显示到屏幕上。

有没有办法将 HBITMAP 图像复制到我的缓冲区?

不幸的是,我仍然是一个初学者,我仍在自学练习和学习,所以我知道可能有很多我仍然不知道的事情,这些可能会立即回答我的问题。

c++ winapi
1个回答
0
投票

使用

CreateDIBSection()
而不是
VirtualAlloc()
来分配像素缓冲区。这将为您提供 DIB 的
HBITMAP
句柄和指向 DIB 像素的原始指针。然后,您可以将
SelectObject()
放入内存
HBITMAP
中,并根据需要在
HDC
或原始缓冲区中进行绘制。
要将另一个

HDC

绘制到您的DIB上,请将另一个

HBITMAP
选择到另一个内存
HBITMAP
中,然后根据需要将其
HDC
/
BitBlt()
放入您的DIB的
StretchBlt()
中。
然后您可以将 DIB 

HDC

StretchDIBits()
放到窗口上。
    

© www.soinside.com 2019 - 2024. All rights reserved.