本文利用Bitmap实现双缓冲,与游戏编程系列实现双缓冲的文章有些交叉。但本文更加强调GDI+技术的实现。
这里需要再重复一遍双缓冲机制和原理。我们将我们希望的数据送付给图形设备,是一个相对于内存操作比较耗时的操作,如果我们频繁地进行这样的交互,就会极大的影响其效率。所以,我们会在内存中先绘制完成,将最终的目标一起送付给图形设备,这样就可以避免一些闪烁等问题。
这里使用双缓冲,是将目标图形都绘制到一个Bitmap结构中,然后将Bitmap,也就是位图一起送付给图形设备完成绘制,与上一节中的绘制相比,我们只是增加了一个过程而已。
重点知识总结:
1. GDI+中,不但可以使用HDC来进行初始化,也可以使用Bitmap指针来进行初始化Graphics对象初始化,二者的差异在于,Graphics绘制的目标,一个在图形DC对应的设备上,一个绘制在Bitmap中,Bitmap是内存中的一个块数据,所以会知道Bitmap的速度要远高于图形设备。
2. Bitmap的初始化种类也很多,这里,我们使用宽和高来对其初始化。
3. DrawImage,不但可以绘制Image图元,也可以绘制Bitmap图元。
现在看代码,
1. 初始化用于缓存的Bitmap,并为该Bitmap构造一个Graphics类
Bitmap CacheImage( fClientWidth, fClientHeight);
Graphics CacheGraphics( &CacheImage );
2. 之后将其他需要绘制的图元绘制到这个缓存的Graphics结构中,这里的绘制和上一节中的绘制没有任何区别,只不过这次是画在了CacheGraphics中而已。
3. 将Bitmap绘制到最终的雨设备相关的Graphics中,ok手工
m_pGraphics->DrawImage(&CacheImage, 0, 0);
这里的0和0是在最终目标中Bitmap的位置,根据实际需要,可以进行调整。