基于Qt的QPixmap和Qimage实现无锯齿圆角图片设置

article/2025/10/21 8:13:59

简述

开发环境:Window10,Qt 5.9.9 ,mingw32

近期做的用来展示图片的软件,涉及到使用QLabel控件和QPixmap类来显示圆角图片。

查了一些资料,发现实现的基本步骤是:

1.读取图片。通过Qt中的QImage或Qpixmap类,读取图片路径。

2.处理图片。结合QPainter类(画笔类),绘制遮罩(QBitmap Mask)和形状(QRect)。

3.绘制图片。使用setPixmap();对label进行设置图片。

最后花费了一些时间参考和学习整理了一下。但因为是从项目中整理出来的,所以其中包含了一些相关的代码片段,比如截取图片中心区域的实现代码。可能会有些多余,也可能能拓展思路,请在理解其中含义后,酌情使用。

最后,感谢各位大佬分享的开发经验,愿与君同行,无限进步。


代码实现

在头文件中,记得包含使用到的类:

//包含使用的类
#include <QPixmap>
#include <QImageReader>
#include <QImage>

步骤1:读取图片(单独使用一个函数,如void ReaderPic(picPath))

//读取图片
QImageReader imageReader;//QimageReader图片预读取类,大批量读取图片时有高效
imageReader.setDecideFormatFromContent(true); //通过文件实际内容格式读取文件
imageReader.setFileName(picPath);//通过图片路径读取图片,picPath为图片绝对路径
QSize imageSize = imageReader.size();//获取图片实际的大小(Width,heigeht)
QSize targetSize;//最后要设置的图片大小
QImage image;//正方形的截图
QImage saveimage;//正方形的截图
int itemPicSize = 85;//图片边长,设置为正方形//截取图片的中心区域
bool isHeight = imageReader.size().width() < imageReader.size().height();
if(isHeight)
{//如果是竖图,就让宽度固定targetSize = QSize(itemPicSize, (itemPicSize*imageSize.height())/imageSize.width());imageReader.setScaledSize(targetSize);//对缩放后的图片进行截取//直接读取图片image = imageReader.read();//竖图时,正方形截取图片的左上角的顶边长度int picLeftside = (targetSize.height()- targetSize.width()) / 2;//从原图中复制出正方形的图片中心区域saveImage = image.copy(0,picLeftside,targetSize.width(),targetSize.width());
}
else
{//如果是横图,让高度固定targetSize = QSize((imageSize.width()*itemPicSize)/imageSize.height(),itemPicSize);imageReader.setScaledSize(targetSize);//对缩放后的图片进行截取//直接读取图片image = imageReader.read();//横图时,正方形截取图片的左上角的左边长度int picTopside = (targetSize.width() - targetSize.height()) / 2;qDebug()<<"【数据输出测试】---当前Topside的大小:"<<picTopside;saveImage = image.copy(picTopside,0,targetSize.height(),targetSize.height());
}
//输出已裁剪为正方形的图片
saveImage.save(QString("D:/PicTest.png"));

 截取图片的中心区域

步骤2:处理图片(设置圆角矩形)

 //以上获取了saveImage的图形数据,在将其设置为pixmap
qreal dpi =devicePixelRatioF();//以浮点数形式返回设备的设备像素比。
int itemPicSize = 85;//图片边长//将Qimage图片转化为QPixmap
QPixmap pixmap = QPixmap::fromImage(image);
//将图片大小乘以显示设备的像素比
QSize realSize = QSize(pixmap.width() * dpi, pixmap.height() * dpi);//新建一个大小为目标图片大小的背景板
QPixmap resultPixmap(realSize);
//设置透明的颜色,表示RGBA值为 (0,0,0,0)的透明色
resultPixmap.fill(Qt::transparent);//以QPixmap 为绘画背景进行画笔绘制
QPainter painter(&resultPixmap);
painter.setRenderHints(QPainter::Antialiasing);//抗锯齿
painter.setRenderHints(QPainter::SmoothPixmapTransform);//平滑像素图变换QPainterPath path;//绘制路径
//绘制圆角矩形,其中最后两个参数值的范围为(0-99),就是圆角的px值
path.addRoundedRect(0, 0, itemPicSize, itemPicSize, 10, 10);//将绘制的圆角矩形路径中内容进行切片
painter.setClipPath(path);
//将切片绘制到resultPixmap中,IgnoreAspectRatio忽视图片比例
painter.drawPixmap(0, 0, itemPicSize, itemPicSize, pixmap.scaled(realSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));resultPixmap.setDevicePixelRatio(dpi);//设置设备像素比

步骤3:设置图片(对label设置)

//对相应的标签设置Qpixmap
ui->label->setPixmap(resultPixmap);

最后的结果如图所示:


http://chatgpt.dhexx.cn/article/sjhiS1l5.shtml

相关文章

PyQt5组件之QPixmap

QPixmap简介 QPixmap类用于绘图设备的图像显示&#xff0c;它可以作为一个QPainterDevice对象&#xff0c;也可以加载到一个控件中&#xff0c;通常是标签或者按钮&#xff0c;用于在标签或按钮上显示图像QPixmap可以读取的图像文件类型有BMP&#xff0c;GIF&#xff0c;JPG等…

QPixmap

一、描述 Qt 提供了四个用于处理图像数据的类&#xff1a; QImage 是为 I/O 以及直接像素访问和操作而设计和优化的。QPixmap 是为在屏幕上显示图像而设计和优化的。QBitmap是一个继承QPixmap的便利类&#xff0c;保证深度为1。如果QPixmap对象确实是位图&#xff0c;isQBitm…

【全奖博士】香港大学招收计算机视觉方向博士/博后/研究助理

来源&#xff1a;AI求职 香港大学 香港大学 (The University of Hong Kong)&#xff0c;简称港大 (HKU)&#xff0c;是一所国际化公立研究型大学&#xff0c;位于香港岛中西区&#xff0c;成立于 1911 年。在最新 QS 世界排名和泰晤士世界排名中&#xff0c;分别位列第 21 位和…

为什么有的计算机本科生就能发表顶会,但是许多博士生还是一篇都没有?

我知道知乎有很多大神本科生&#xff0c;也有很多普通的博士生。希望本科大佬不要看不起那些平庸博士&#xff0c;博士生也不要嫉妒本科大佬。大家尽量客观的分析问题。 本科生还有很多时间要上课&#xff0c;博士生全天科研而且有4,5年的时间。虽然能发顶会的本科生肯定是非常…

计算机专业博士阶段研究方向,国内计算机专业博士研究方向

国内计算机专业博士研究方向 国内计算机专业博士研究方向 学校名称 专业 研究方向 复旦大学 081202 计算机软件与理论 01数据库与知识库 02数字图书馆 03数据挖掘 04电子商务 05软件工程 06Web数据管理与数据挖掘 07对等(P2P) 计算技术 08流数据分析与管理 09智能信息处理 10算…

怎么学好数据结构?北大计算机博士亲授。

首先明确一下&#xff0c;为什么要学好数据结构&#xff1f;如果你是一位职场人士&#xff0c;那你肯定知道&#xff0c;工作中要用到数据结构的时候少之又少&#xff0c;所以很少会有职场人特意来学好数据结构。但是据我观察&#xff0c;这依然是有必要的。而且很多公司包括一…

计算机相关专业提升学历的解决方案(博士研究生)

文章目录 1、正规全日制博士1.1 申请 - 考核制1.2 硕博连读与直博 2、继续教育&#xff08;非全日制&#xff09;2.1 在职博士2.2 同等学力申博 3、海外博士3.1 海外博士3.2 中外合作博士 博士录取政策 国内博士&#xff0c;没有具体的政策&#xff0c;招生权力下放到各个高校。…

博士申请 | 香港大学计算机科学系黄超老师招收2022年入学全奖博士生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 香港大学 黄超老师将于 2021 年秋季加入香港大学&#xff08;University of Hong Kong-HKU&…

博士申请 | 加拿大阿尔伯塔大学韩杰教授招收电子与计算机专业博士/博后

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 阿尔伯塔大学 阿尔伯塔大学&#xff08;University of Alberta&#xff09;&#xff0c;始建…

我为什么鼓励你读计算机领域的博士?

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达本文转自 | 科研大叔 看过《水浒传》的朋友都知道&#xff0c;梁山的一百单八将因为各种理由加入了水寨&#xff0c;走上了劫富济贫、替天行道的路。我2006年从南京大学本…

博士申请 | 香港城市大学计算机学院徐伟涛老师组招收人工智能全奖博士生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 香港城市大学 香港城市大学是一所坐落于香港九龙塘的公立研究型大学。2023 年 QS 世界大学排…

博士申请 | 澳门大学张一博教授课题组招收计算机视觉方向全奖博士生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 澳门大学 澳门大学新校区位于美丽的珠海横琴岛&#xff0c;是澳门唯一的公立综合性大学&…

2022年中山大学计算机学院计算机考博申博博士经验分享

2022年中山大学计算机学院计算机考博申博博士经验分享 自己考博时候&#xff0c;得到了中山大学师兄的帮助&#xff0c;感觉非常感激&#xff0c;因此博士考完之后&#xff0c;我想将自己的考博经验与大家分享&#xff0c;中间或许有些问题记得不太清楚&#xff0c;各位同学朋…

博士申请 | 美国佛罗里达州立大学计算机系王广老师招收人工智能全奖博士生...

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 佛罗里达州立大学 佛罗里达州立大学&#xff08;Florida State University&#xff09;&…

交大博士学长:研究生计算机专业的方向选择!

Datawhale干货 作者&#xff1a;一辈闲&#xff0c;上海交大博士&#xff0c;Datawhale邀约作者 作者知乎&#xff1a;https://www.zhihu.com/people/yi-bei-xian-16 目前计算机专业的研究方向主要分为四个大方向分别是&#xff1a;AI&#xff08;人工智能&#xff09;、Syste…

【学术相关】交大博士学长:研究生计算机专业的方向选择!

Datawhale干货 作者&#xff1a;一辈闲&#xff0c;上海交大博士&#xff0c;Datawhale邀约作者 作者知乎&#xff1a;https://www.zhihu.com/people/yi-bei-xian-16 目前计算机专业的研究方向主要分为四个大方向分别是&#xff1a;AI&#xff08;人工智能&#xff09;、Syste…

计算机专业要不要读博?(转)

看过《水浒传》的朋友都知道&#xff0c;梁山的一百单八将因为各种理由加入了水寨&#xff0c;走上了劫富济贫、替天行道的路。我2006年从南京大学本科毕业以后&#xff0c;耳闻目睹了数百位计算机专业的博士&#xff08;生&#xff09;&#xff0c;他们选择读博士的理由可以说…

博士申请 | 美国乔治梅森大学计算机系招收机器学习方向全奖博士生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f; AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01; 乔治梅森大学 GMU位于美国首都华盛顿特区的郊区 (Fairfax, VA)。其计算机系csranking排名45…

计算机科学全奖博士招生,福特汉姆大学魏文启课题组

来源&#xff1a;机器之心 导师介绍 魏文启博士将于 2023 年 1 月加入福特汉姆大学 (Fordham University) 计算机与信息科学系&#xff0c;担任助理教授。目前他在 IBM Almaden 研究中心担任研究员。 个人主页&#xff1a;https://wenqiwei789.github.io/Homepage/ 他于 2022 年…

学界 | 读计算机博士的未来出路在哪里?

大数据文摘出品 在追求学位的道路上&#xff0c;博士学位或许是一个至高点。但这条路颇不好走&#xff0c;财务、精力、年龄&#xff0c;以及身边人的诱惑。很多人质疑读了博士有什么用处&#xff1f;甚至一些已经入了圈的人儿也在怀疑&#xff0c;这条路走的对不对&#xff1f…