Win32双缓冲绘图和位图的绘制 您所在的位置:网站首页 mfc画一个矩形 Win32双缓冲绘图和位图的绘制

Win32双缓冲绘图和位图的绘制

2023-03-13 17:32| 来源: 网络整理| 查看: 265

目的:

原因是绘图(前景)与显示器(背景)刷新不同步,有时间差,眼睛看上去好像在闪烁。为解决这一问题,这就需要用到双缓冲技术来绘图了。双缓冲技术是相对单缓冲而言的,单缓冲就是直接在设备DC上绘图;而双缓冲就是先在一个与设备DC相兼容的内存缓冲区里进行绘图,然后再一次性复制到设备DC上。一次性在屏幕上显示就不会出现闪烁的现象。

一、双缓冲技术的使用

双缓冲绘图步骤: 1.在内存中创建兼容DC缓冲区(依次包括创建兼容DCCreateComatibleDC、创建画布CreatrCompatibleBitnap、将画布选入SelectObject)。 2.在缓冲区进行画图操作(可以画图形、也可以贴位图)。 3.将兼容缓冲区一次性复制到设备DC上。(复制用Bitblt函数) 4.释放内存缓冲区。(DeleteDC函数)

几个关键API函数: CreateCompatibleDC: 该函数创建一个与指定设备兼容的内存设备上下文环境(DC)

HDC CreateCompatibleDC(HDC hdc);

CreateCompatibleBitmap: 该函数创建与指定的设备环境相关的设备兼容的位图

HBITMAP CreateCompatibleBitmap(HDC hdc, int nWidth, // 定位图的宽度,单位为像素 int nHeight);// 指定位图的高度,单位为像素

BitBlt: BitBlt是一个计算机函数,该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境

BOOL BitBlt( _In_ HDC hdcDest, _In_ int nXDest, // 指定目标矩形区域左上角的X轴逻辑坐标 _In_ int nYDest, // 指定目标矩形区域左上角的Y轴逻辑坐标 _In_ int nWidth, // 指定源在目标矩形区域的逻辑宽度 _In_ int nHeight, // 指定源在目标矩形区域的逻辑高度 _In_ HDC hdcSrc, // 指向源设备环境的句柄 _In_ int nXSrc, // 指定源矩形区域左上角的X轴逻辑坐标 _In_ int nYSrc, // 指定源矩形区域左上角的Y轴逻辑坐标 _In_ DWORD dwRop); //指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。 单双缓冲技术操作对比:

单缓冲技术绘制两个矩形:

// 直接在设备DC上绘制 Rectangle(hdc, 100, 100, 200, 200); Rectangle(hdc, 300, 300, 200, 200);

双缓冲技术绘制两个矩形:

// 1.创建兼容缓冲区 mdc = CreateCompatibleDC(hdc); // 创建兼容DC bmp = CreateCompatibleBitmap(hdc, 600, 600); // 创建兼容位图画布 SelectObject(mdc, bmp); // 选入 // 2.在缓冲区绘制 Rectangle(mdc, 100, 100, 200, 200); Rectangle(mdc, 300, 300, 200, 200); // 3.一次性复制到设备DC BitBlt(hdc, 0, 0, 500, 500, mdc, 0, 0, SRCCOPY); // 4.释放缓冲区DC DeleteDC(mdc);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有