一种使用Qt快速绘图的思路

本文探讨了使用Qt进行高效绘图的方法,包括利用QImage进行双缓冲绘图,通过QtConcurrent实现多线程加速,以及在坐标转换代价较大时采用数据采样策略,以平衡质量和速度。通过代码片段展示了实现思路。
摘要由CSDN通过智能技术生成

Qt具有强大的绘图功能,相信熟悉Qt的人都有这个体会,再加上一个基于Qt的绘图库,使得绘制各种图形都更加方便,比如qwt,应该是接触的比较多的。Qt本身的Graphic Model/View,在一些方面更加方便。在此,我想说一下下面这种样式图的画法思路。


来分析下图,不同像素颜色不同(或者相同)。一般不同像素都有实际意义,或者对应有实际的计算方法,可以取到某个坐标位置的图的颜色(一般取到的是某中强度值,然后根据这个强度值去查颜色表,本篇以后提到坐标对应的值都表示为强度)。并且,一般来说,二维图形都会支持缩放。这样会带来一个问题,不同缩放比例下需要计算对应的实际坐标(我们称之为世界坐标)是不同的。这样就需要一个世界坐标和像素坐标的转换,我们不在此讨论坐标转换的实现问题。假设这种转换关系我们已经知道了,我们现在只关注如何绘制的问题。

先来看下Qt中有哪些可以用的工具。熟悉Qt的人都知道,双缓冲的速度要快。而双缓冲的实现就是依赖于在内存中构建一个QImage(或者QPixmap等)对象,对它进行绘制,然后显示这个对象。我们就这么做,首先构建一个QImage。QImage的大小如何确定?可以取当前视口的设备坐标范围,也就是像素坐标范围。大小有了,就该填充值了。看下QImage的方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值