【接口封装】——5、绘制头像
解释:
参数1:目标图片
参数2:底部图片
参数3:底片大小
实现 “目标图片” 只显示与 “底部图片”重叠大小的部分
头文件:
#include <qpainter.h>
函数定义:
static QPixmap getRoundPixmap(QPixmap src, QPixmap mask, QSize masksize = QSize(0, 0));
源代码:
QPixmap CommonUtils::getRoundPixmap(QPixmap src, QPixmap mask, QSize masksize) { if (masksize.isEmpty()) { masksize = mask.size(); } else {// 缩放(大小,保持纵横比,平滑图片) mask = mask.scaled(masksize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } src = src.scaled(masksize, Qt::KeepAspectRatio, Qt::SmoothTransformation); //选择底片 QImage image(masksize, QImage::Format_ARGB32_Premultiplied); QPainter p(&image); //构造画笔:开始绘制 p.setCompositionMode(QPainter::CompositionMode_Source);//选择模式:源图 p.fillRect(image.rect(), Qt::transparent); //填充透明矩形:消除半透明边角 p.setCompositionMode(QPainter::CompositionMode_SourceOver); //选择模式:交集覆盖在上,不在下 p.drawPixmap(0, 0, mask);//开始画出目标(mask)图 p.setCompositionMode(QPainter::CompositionMode_SourceIn);//选择模式:取源图像交集 p.drawPixmap(0, 0, src);//开始画出 src 图 //p.end(); return QPixmap::fromImage(image);//返回生成的图像 }
函数调用:
QLabel *head = new QLabel(this); QPixmap src(HEAD_IMG_SRC); QPixmap mask(HEAD_IMG_MASK); head->setPixmap(CommonUtils::getRoundPixmap(src,mask,head->size()));