目的
主要用于解决因绘制复杂数据量大的图形,或是需要实时更新的图形数据,直接在DC中绘制,会产生图形显示延迟闪烁等现象。
#原理
首先将需要绘制的图形绘制到内存虚拟屏幕中,然后利用相关API函数,一次全屏拷贝到OSD实际显示屏幕中,此过程即完成双缓冲绘图。
优点
- 在一定程度上提高CPU处理效率
- 可避免因数据量过大,而大致绘制过程中掉帧或是显示不连续
- …
实现
Win32
// 获取客户区大小
RECT rc;
GetClientRect(&rc);
HDC hDC; // 显示DC
HDC hMemDC; // 内存DC
HBITMAP hMemBmp; // 内存位图
HBITMAP hPreBmp; // 原位图
hMemDC = CreateCompatibleDC(hDC);
hMemBmp = CreateCompatibleBitmap(hDC, rc.right - rc.left, rc.bottom - rc.top);
hPreBmp = (HBITMAP)SelectObject(hMemDC, hMemBmp);
/*此处开始各种绘制*/
// 将内存DC一次拷贝到显示DC中
BitBlt(hDC, 0, 0, rc.right - rc.left, rc.bottom - rc.top, hMemDC, 0, 0, SR