qt修改图片为圆形

您所在的位置:网站首页 怎么截取圆形头像 qt修改图片为圆形

qt修改图片为圆形

2024-05-28 00:19| 来源: 网络整理| 查看: 265

在这篇文章之前首先介绍一下百度上找到的方法:

QPixmap pixmapToRound(QPixmap &src, int radius) {     if(src.isNull())     {         return QPixmap();     }     QPixmap pix(src.width(), src.height());     pix.fill(Qt::transparent);  //设置图片透明     QPainter painter(&pix);     painter.setRenderHint(QPainter::Antialiasing);     painter.setRenderHint(QPainter::SmoothPixmapTransform);

    QPainterPath path;     path.addEllipse(src.rect().center(), radius, radius);     painter.setClipPath(path);

    painter.drawPixmap(QRect(src.width() / 2 - radius, src.height() / 2 - radius,                              radius * 2, radius * 2), src);     return pix; }  

如上述代码所示,百度上一搜索基本上都是这一个教程。该教程描述的是使用该方法可以获得一个没有锯齿的圆形图片。

很可惜,经过测试,当目标图片和原图片尺寸相差太大时,图片四周仍然有锯齿,且获取到的目标图片精度太低太低。。。。

于是在上述代码的基础上我做了一定的修改。

1、首先将图片进行缩放,通过平滑缩放,将图片缩放到目标尺寸,这样可以保留精度。

2、绘制圆的时候将图片原点设置为绘制原点,可以尽可能的保留图片元素。

代码如下:

QPixmap PixmapToRound(const QPixmap &src, int radius) {     if (src.isNull())      {         return QPixmap();     }

    //按比例缩放     QPixmap pixmapa;     if(src.width() != radius || src.height() != radius)     {         pixmapa = src.scaled(radius, radius, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);     }     else     {         pixmapa = src;     }

    QPixmap pixmap(radius,radius);     pixmap.fill(Qt::transparent);

    QPainter painter(&pixmap);     painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform |  QPainter::HighQualityAntialiasing);

    QPainterPath path;     path.addEllipse(0, 0, radius, radius);     painter.setClipPath(path);     painter.drawPixmap(0, 0, radius, radius, pixmapa);

    return pixmap; }  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3