当前位置: 首页 > article >正文

【接口封装】——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()));

http://www.kler.cn/a/408686.html

相关文章:

  • Windows 软件之 FFmpeg
  • 【bug】使用transformers训练二分类任务时,训练损失异常大
  • CPU命名那些事
  • ctfshow-Misc入门(1-16)
  • 【机器学习chp5】线性回归
  • D73【 python 接口自动化学习】- python 基础之正则表达式
  • c++的类和对象(1)
  • PDF内容提取,MinerU使用
  • vscode + ROS 配置快捷编译
  • 【C++】从C语言到C++学习指南
  • GESP语法知识(快速排序)
  • VRRP虚拟路由实现主备设备负载分担
  • 在Spring Boot项目中集成RabbitMQ消息中间件
  • JSON 性能测试 - WastJson 性能也很快
  • 基于LiteFlow的风控系统指标版本控制
  • ApiChain 从迭代测试用例到项目回归测试 核心使用教程
  • 知乎日报——第二周
  • 乐鑫ESP32物联网方案,设备人机交互技术应用,启明云端乐鑫代理商
  • Java连接MySQL数据库进行增删改查操作
  • Flink-Source的使用
  • (二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
  • -Dspring.profiles.active=dev与--spring.profiles.active=dev的区别
  • 默语博主的推荐:探索技术世界的旅程
  • 8、深入剖析PyTorch的state_dict、parameters、modules源码
  • GCC编译过程(预处理,编译,汇编,链接)及GCC命令
  • 如果在docker 容器中安装ros遇到的问题