Qt具有强大的绘图功能,相信熟悉Qt的人都有这个体会,再加上一个基于Qt的绘图库,使得绘制各种图形都更加方便,比如qwt,应该是接触的比较多的。Qt本身的Graphic Model/View,在一些方面更加方便。在此,我想说一下下面这种样式图的画法思路。
来分析下图,不同像素颜色不同(或者相同)。一般不同像素都有实际意义,或者对应有实际的计算方法,可以取到某个坐标位置的图的颜色(一般取到的是某中强度值,然后根据这个强度值去查颜色表,本篇以后提到坐标对应的值都表示为强度)。并且,一般来说,二维图形都会支持缩放。这样会带来一个问题,不同缩放比例下需要计算对应的实际坐标(我们称之为世界坐标)是不同的。这样就需要一个世界坐标和像素坐标的转换,我们不在此讨论坐标转换的实现问题。假设这种转换关系我们已经知道了,我们现在只关注如何绘制的问题。
先来看下Qt中有哪些可以用的工具。熟悉Qt的人都知道,双缓冲的速度要快。而双缓冲的实现就是依赖于在内存中构建一个QImage(或者QPixmap等)对象,对它进行绘制,然后显示这个对象。我们就这么做,首先构建一个QImage。QImage的大小如何确定?可以取当前视口的设备坐标范围,也就是像素坐标范围。大小有了,就该填充值了。看下QImage的方法: