精华内容
下载资源
问答
  • qt 抗锯齿

    千次阅读 2011-11-12 17:24:51
    使用qt的话,也可以实现抗锯齿,并且不只是一些线条的抗拒,比如说是画直线或者圆的时候,text也可以抗拒。 参看qt的帮助文档: QPainter::Antialiasing 0x01 Indicates that the engine should antialias ...

    博客已搬家至360converter博客平台,此文链接:http://blog.360converter.com/archives/924


    展开全文
  • QT实现抗锯齿圆形头像

    热门讨论 2015-01-20 20:38:53
    参考QT Demo(Image Composition),使用QT图片混合技术实现抗锯齿头像小Demo,Windows QtCreator创建运行通过。经过尝试setMask方式始终存在锯齿,最后在这种图片混合方式下尝试成功。build-showroundpic-Desktop_Qt_5...
  • Qt】2D绘图之抗锯齿渲染

    万次阅读 2021-03-24 11:45:00
    抗锯齿绘图06. 附录 01. 概述 本部分的内容可以在帮助文档中通过Coordinate System关键字查看。 02. 开发环境 Windows系统:Windows10 Qt版本:Qt5.15或者Qt6 03. 逻辑绘图 图形基元的大小(宽度和高度)始终与其...

    00. 目录

    01. 概述

    本部分的内容可以在帮助文档中通过Coordinate System关键字查看。

    02. 开发环境

    Windows系统:Windows10

    Qt版本:Qt5.15或者Qt6

    03. 逻辑绘图

    图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子。
    在这里插入图片描述

    04. 物理绘图

    在默认的情况下.绘制会产生锯齿. 并且使用这样的规则进行绘制: 当使用宽度为一个像素的画笔进行渲染时.像素会在数学定义的点的右边和下边进行渲染,如下图所示。当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染;而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边和下边。

    在这里插入图片描述
    在这里插入图片描述

    05. 抗锯齿绘图

    抗锯齿( Anti-aliased)又称为反锯齿或者反走样,就是对图像的边缘进行平滑处理,使其看起来更加柔和流畅的一种技术。QPaint er 进行绘制时可以使用QPainter ::RenderHint 渲染提示来指定是否要使用抗锯齿功能,RenderHint 取值分为以下三种。在这里插入图片描述

    如果在绘制时使用了抗锯齿渲染提示,即使用 QPainter:: setRenderHint(RenderHint hint, bool on = true) 函数,将参数 hint 设置为了 QPainter:: Antialiasing。那么像素就会在数学定义的点的两侧对称的进行渲染,如下图所示。
    在这里插入图片描述

    程序示例

    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); //抗锯齿和使用平滑转换算法
    

    06. 附录

    展开全文
  • QT中使用QPainter 进行自行绘图的时候,为了防止“锯齿”的出现,我们会经常使用抗锯齿属性,也叫反走样, 既: QPainter::Antialiasing //绘图抗锯齿 QPainter::TextAntialiasing //绘制的字体抗锯齿 QT ...

    QT中使用QPainter 进行自行绘图的时候,为了防止“锯齿”的出现,我们会经常使用抗锯齿属性,也叫反走样, 既:

    QPainter::Antialiasing //绘图抗锯齿
    QPainter::TextAntialiasing //绘制的字体抗锯齿

    QT 只是和很多系统的绘图API一样,提供了抗锯齿的方法,不过抗锯齿的属性默认都是关闭的,QT也不例外。

    为了直观的理解抗锯齿(反走样)的作用。我们先给出效果图:
    抗锯齿效果对比
    上面的图中,黑色的字体、直线、与上面的圆,都是没有启用抗锯齿(反走样)的效果的; 下面的红色字体、直线、下面的圆都是启用了抗锯齿(反走样)之后的效果。 可以看出,两幅图的效果差别还是挺大的。

    我们先来讲一下有关画法的用法

    1.画文字

    void drawText(const QPointF &p, const QString &s);
    void drawText(const QPoint &p, const QString &s);
    void drawText(int x, int y, const QString &s);
    void drawText(const QPointF &p, const QString &str, int tf, int justificationPadding);
    void drawText(const QRectF &r, int flags, const QString &text, QRectF *br = Q_NULLPTR);
    void drawText(const QRect &r, int flags, const QString &text, QRect *br = Q_NULLPTR);
    void drawText(int x, int y, int w, int h, int flags, const QString &text, QRect *br = Q_NULLPTR);
    void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption());

    可以看出,画文字,有很多种方法,但是无非就是提供文字的坐标,与文字内容。可以根据自己的场景选用不同的方法。

    2.画直线

    void drawLine(const QLineF &line);
    void drawLine(const QLine &line);
    void drawLine(int x1, int y1, int x2, int y2);
    void drawLine(const QPoint &p1, const QPoint &p2);
    void drawLine(const QPointF &p1, const QPointF &p2);

    提供起点、终点的坐标就可以了

    3.画椭圆(圆)

    void drawEllipse(const QRectF &r);
    void drawEllipse(const QRect &r);
    void drawEllipse(int x, int y, int w, int h);
    void drawEllipse(const QPointF &center, qreal rx, qreal ry);
    void drawEllipse(const QPoint &center, int rx, int ry);

    其实这个画椭圆的函数,需要制定椭圆所在的矩形框位置。如果指定的矩形框是正方形,画出来就是圆形,否则就是椭圆。

    我们的例子中,就是在paintEvent重绘函数中,就是使用了上面三个函数,分别使用 无抗锯齿(反走样), 抗锯齿(反走样),画出了文字、直线、圆,进行对比。

    void MyFrame::paintEvent(QPaintEvent *ev)
    {
        QPainter painter(this);
    
        QBrush brush(Qt::red);
        QBrush brush1(Qt::green);
        QPen pen(brush1, 5, Qt::DashDotLine, Qt::RoundCap);
    
        /**********************未启用抗锯齿功能**************************/
        painter.setPen(Qt::black);
    
        //画字体
        painter.drawText(QRectF(20, 30, 100, 100), "这是一行文字");
    
        //画一条没有启用反锯齿的线
        painter.drawLine(20, 50, 400, 60);
    
        //画一个圆
        painter.setBrush(brush);
        painter.setPen(pen);
        painter.drawEllipse(20, 55, 150, 150);
    
    
        /**********************启用抗锯齿功能**************************/
        painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
        painter.setPen(Qt::red);
    
        //画字体
        painter.drawText(QRectF(20, 280, 100, 100), "这是一行文字");
    
        //画一条启用反锯齿的线
        painter.drawLine(20, 300, 400, 310);
    
        //画一个圆
        painter.setPen(pen);
        painter.setBrush(brush);
        painter.drawEllipse(20, 305, 150, 150);
    }
    

    我们看到了,是怎样开启抗锯齿(反走样)功能了,就是这句话

    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

    前面的 Antialiasing 是绘画普通图形启用反走样, TextAntialiasing是绘画文字反走样。

    也可以使用下面的函数进行开启抗锯齿(反走样)功能。

    painter.setRenderHint(QPainter::Antialiasing, true);

    这里设置Antialiasing属性为true,经过这句设置,我们就打开了反走样功能。QPainter和OPengl一样,是一个状态机。因此,我们这里打开了她,之后所有的代码都是开启反走样绘制的了。若要关闭反走样功能:

    painter.setRenderHint(QPainter::Antialiasing, false);

    到了这里,我们就会发现,反走样的效果要比走样的好得多。那么为什么系统绘图的API(包含QT在内)为什么默认不打开反走样的呢?这是因为,反走样是一种比较复杂的算法,在一些对图像质量要求不高的应用中,是不需要进行开启反走样的。为了提高效率,一般的图形绘制,都是默认不开启反走样的。

    另外一个特别重要的两个属性:画笔QPen 和 画刷 QBrush

    QPen : 用于绘制轮廓线

    QBrush: 用于填充

    展开全文
  • Qt 反走样(抗锯齿

    万次阅读 2017-07-29 22:12:58
    转载自:...很多系统的绘图 API 里面都内置了有关反走样的算法,不过由于性能问题,默认一般是关闭的,Qt 也不例外。//QPainter::Antialiasing 告诉绘图引擎应该在可能的情况下进行边的反锯齿

    转载自:http://blog.chinaunix.net/uid-24219701-id-4044333.html


    反走样是图形学中的重要概念,用以防止通常所说的“锯齿”现象的出现。很多系统的绘图 API 里面都内置了有关反走样的算法,不过由于性能问题,默认一般是关闭的,Qt 也不例外。

    //QPainter::Antialiasing           告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制
    //QPainter::TextAntialiasing       尽可能的情况下文字的反锯齿绘制
    //QPainter::SmoothPixmapTransform  使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法
    
    painter.setRenderHint(QPainter::Antialiasing, true);

    我们通过这条语句,将Antialiasing属性(也就是反走样)设置为 true。经过这句设置,我们就打开了QPainter的反走样功能。

    由于反走样需要比较复杂的算法,在一些对图像质量要求不是很高的应用中,是不需要进行反走样的。为了提高效率,一般的图形绘制系统,都是默认不进行反走样的。

    展开全文
  • QT锯齿

    万次阅读 2015-06-24 14:27:52
    在用GDI+绘图时候,发现发大的png不会有锯齿,很漂亮,但是在qt中却有锯齿现象,因此网上查了一下,得到如下,确实有用,但还是不够gdi+平滑,由于贴图,因此用到了SmoothPixmapTransform ... ...
  • 本篇重点介绍Cairo绘图引擎,Qt自带的QPainter的绘图效率和抗锯齿效果都没有cairo的好。 Cairo:C编写的开源绘图引擎(基于LGPL协议),大名鼎鼎的FireFox就是用这个绘图引擎的。Cairo是非常流行的开源2D图形渲染...
  • OpenGL 开启抗锯齿(多重采样)如下: glEnable(GL_MULTISAMPLE); 然而在QT项目中次句设置无效,通过上网查询找到解决方法: QGLFormat format; format.setDepthBufferSize(0); format.setStencilBufferSize...
  • GitHub源码仓库:Qt学习例程 1.QPainter绘图抗锯齿 ...// 设置 抗锯齿能力,抗锯齿会让绘图效率较低 painter.setRenderHint(QPainter::Antialiasing); painter.drawEllipse(QPoint(200,50), 50, 50); // 设置 抗锯齿.
  • 在QOpenGLWidget的构造函数添加下面几句代码即可 QSurfaceFormat surfaceFormat; surfaceFormat.setSamples(4);//多重采样 setFormat(surfaceFormat);...在qt的QOpenGLWidget开启opengl的...
  • qt锯齿操作

    千次阅读 2018-07-03 09:41:14
    QPainter::Antialiasing 告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制 QPainter::TextAntialiasing 尽可能的情况下文字的反锯齿绘制 QPainter::SmoothPixmapTransform 使用平滑的pixmap变换算法(双线性插值...
  • 抗锯齿:使直线和多边形的锯齿状边缘变得平滑。 雾:创建具有大气效果的场景。 二、混合 混合的最终效果是使场景看上去像是半透明的。 一个通俗的方式来解释混合的话,例如透过绿色的玻璃观察一个物体...
  • 最近使用QGraphicsItem做自定义绘图功能, ... 于是试试开启抗锯齿看看效果如何. 重载的函数中QGraphicsItem::paint()中加入下面代码 painter.setRenderHint(QPainter::Antialiasing,true); 绘制的圆形的边缘很光滑 ...
  • 一、抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子。 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且使用这样的...
  • QPainter QPixmap 抗锯齿

    千次阅读 2019-07-19 15:16:55
    在paintEvent(QPaintEvent *)实现函数里绘制图片出现边缘锯齿解决办法: pixmap.loadFromData(sealImage,sealImageLen); pixmap = pixmap.scaled(w, h, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); ...
  • QPainter抗锯齿

    千次阅读 2019-09-28 19:39:32
    抗锯齿: QPainter painter(this); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.translate(0, 0); //加载图片不能设置宽,高,否则通用出现拉伸 painter.drawPixmap(0, 0, QPixmap(":/datetime/...
  • drawRoundRect抗锯齿的的方法
  • 其原地址如下,https://learnopengl-cn.github.io/04%20Advanced%20OpenGL/11%20Anti%20Aliasing/ 关于抗锯齿的详细知识了解请看原教程,本篇旨在对Vires基于visual studio平台的编程思想与c++代码做纯Qt平台的移植...
  • qt 画线会卡,使用抗锯齿,画一会就开始卡,怎么解决[img=https://img-bbs.csdn.net/upload/201311/18/1384738261_411783.png][/img] 需要实现上图效果

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,133
精华内容 453
关键字:

qt抗锯齿