在使用WPF框架进行图像绘制的时候,您是不是也碰到过类似问题,当需要将大量的图形信息绘制到屏幕上时,常常感觉图形绘制的速度心有余而力不足,绘制卡顿、用户体验效果很差,其中的原因在本文中不做过多的分析,但是我们可以通过使用WriteableBitmap对象显著更改图形绘制效率。
WriteableBitmap继承至BitmapSource对象,可以将WriteableBitmap的内容作为Image的Souce从而实现图形内容的可视化输出。WriteableBitmap 类使用两个缓冲区:前台及后台缓冲器,两个缓冲区均在系统内存中分配。“后台缓冲区”可以累积当前未显示的内容。“前台缓冲区”为直接输出显示的内容。
当有大量的图形信息需要绘制到屏幕且图形内容更新速度很快,完全可以利用WriteableBitmap对象进行图形绘制。首先将WriteableBitmap对象锁定,然后更新WriteableBitmap对象的BackBuffer,完成后台缓冲区内容更新后解锁WriteableBitmap对象,实现前台内容的刷新。但在实际使用中,尤其是需要大量更新图形内容时,多采用后台线程的方法进行数据的获取和计算,并将计算完成后的内容填写到后台缓冲区,但在使用WriteableBitmap对象的过程中,如果在线程中定义WriteableBitmap对象,在线程中更新WriteableBitmap的后台缓冲区,再通过线程同步的方式将更新后的WriteableBitmap对象作为窗口Image控件的source对象来更新图像,却发现达不到目的,图像内容不会有任何的更改,原因是因为WriteableBitmap是在线程中定义的无法通过线程同步的方式把其它线程中刷新的内容同步更新到主窗体线程。
如果利用WriteableBitmap通过多线程的方式既可以实现内容的后台更新,又能达到刷新图形显示内容的目的