反走样

今天继续前面的内容。既然已经进入2D绘图部分,那么就先继续研究一下有关QPainter的东西吧!
反走样是图形学中的重要概念,用以防止“锯齿”现象的出现。很多系统的绘图API里面都会内置了反走样的算法,不过默认一般都是关闭的,Qt也不例外。下面我们来看看代码。这段代码仅仅给出了paintEvent函数,相信你可以很轻松地替换掉前面章节中的相关代码。
void PaintedWidget::paintEvent(QPaintEvent *event) 
{ 
        QPainter painter(this); 
        painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap)); 
        painter.setBrush(Qt::yellow); 
        painter.drawEllipse(50, 150, 200, 150); 

        painter.setRenderHint(QPainter::Antialiasing, true); 
        painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap)); 
        painter.setBrush(Qt::yellow); 
        painter.drawEllipse(300, 150, 200, 150); 
}

 
左边的是没有使用反走样技术的,右边是使用了反走样技术的。二者的差别可以很容易的看出来。
下面来看看相关的代码。为了尝试画笔的样式,这里故意使用了一个新的画笔:
 
painter.setPen(QPen(Qt::black, 5, Qt::DashDotLine, Qt::RoundCap));
 
我们对照着API去看,第一个参数是画笔颜色,这里设置为黑色;第二个参数是画笔的粗细,这里是5px;第三个是画笔样式,我们使用了DashDotLine,正如同其名字所示,是一个短线和一个点相间的类型;第四个是RoundCap,也就是圆形笔帽。然后我们使用一个黄色的画刷填充,画了一个椭圆。
后面的一个和前面的十分相似,唯一的区别是多了一句
 
painter.setRenderHint(QPainter::Antialiasing, true);

,不过这句也很清楚,就是设置Antialiasing属性为true。如果你学过图形学就会知道,这个长长的单词就是“反走样”。经过这句设置,我们就打开了QPainter的反走样功能。还记得我们曾经说过,QPainter是一个状态机,因此,只要这里我们打开了它,之后所有的代码都会是反走样绘制的了。
看到这里你会发现,反走样的效果其实比不走样要好得多,那么,为什么不默认打开反走样呢?这是因为,反走样是一种比较复杂的算法,在一些对图像质量要求不高的应用中,是不需要进行反走样的。为了提高效率,一般的图形绘制系统,如Java2D、OpenGL之类都是默认不进行反走样的。
 
本文出自 “ 豆子空间” 博客,请务必保留此出处 http://devbean.blog.51cto.com/448512/237447
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值