我正在尝试绘制屏幕外设备上下文/位图,并使用bitblt将图像移至主hdc。这是我目前看到的结果:
左侧的蓝色,黄色和绿色条直接绘制到窗口的hdc。右边看起来很奇怪的图像被绘制到后台缓冲区,并复制为一个帧。它们应该是相同的,但显然并非如此。
这是我正在使用的代码,简化为一个最小的示例:
COLORREF color_yellow = RGB (224, 224, 0);
COLORREF color_green = RGB (0, 192, 0);
COLORREF color_blue = RGB (0, 0, 192);
HBRUSH brush_yellow = CreateSolidBrush (color_yellow);
HBRUSH brush_green = CreateSolidBrush (color_green);
HBRUSH brush_blue = CreateSolidBrush (color_blue);
HDC hdc = GetDC (Window);
HDC hdc_buffer = CreateCompatibleDC (hdc);
HBITMAP bitmap_buffer = CreateCompatibleBitmap (hdc_buffer, blit.screen_width, blit.screen_height);
SelectObject (hdc_buffer, bitmap_buffer);
draw_rectangle (hdc, 0, 0, 100, 30, brush_blue);
draw_rectangle (hdc, 0, 30, 100, 60, brush_yellow);
draw_rectangle (hdc, 0, 60, 100, 90, brush_green);
draw_rectangle (hdc_buffer, 0, 0, 100, 30, brush_blue);
draw_rectangle (hdc_buffer, 0, 30, 100, 60, brush_yellow);
draw_rectangle (hdc_buffer, 0, 60, 100, 90, brush_green);
BitBlt (hdc, 120, 0, 100, 90, hdc_buffer, 0, 0, SRCCOPY);
void draw_rectangle (HDC hdc, int left, int top, int right, int bottom, HBRUSH brush)
{
RECT rect;
SetRect (&rect, left, top, right, bottom);
FillRect (hdc, &rect, brush);
}
我正在创建一个新的hdc(与窗口兼容),创建一个兼容的位图,选择它,绘制矩形,并使用SRCCOPY进行位图绘制。所有这些在我看来都是正确的。
我确定有一些小事情我没有做,但是我找不到。
最佳答案
在 CreateCompatibleBitmap
的文档中对此进行了解释:
因此,改变
CreateCompatibleBitmap(hdc_buffer, width, height);//monochrome
至
CreateCompatibleBitmap(hdc, width, height);//colored bitmap