qt修改图片为圆形 |
您所在的位置:网站首页 › 怎么截取圆形头像 › qt修改图片为圆形 |
在这篇文章之前首先介绍一下百度上找到的方法: 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 |