Qt图像合成原理

article/2025/9/18 12:04:27

Qt图像合成原理

本文为原创文章,转载请注明出处,或注明转载自“黄邦勇帅(原名:黄勇)

本文出自本人原创著作《Qt5.10 GUI完全参考手册》网盘地址:
https://pan.baidu.com/s/1iqagt4SEC8PUYx6t3ku39Q
《C++语法详解》网盘地址:https://pan.baidu.com/s/1dIxLMN5b91zpJN2sZv1MNg

若对C++语法不熟悉,建议参阅本人所著《C++语法详解》一书,电子工业出版社出版,该书语法示例短小精悍,对查阅C++知识点相当方便,并对语法原理进行了透彻、深入详细的讲解,可确保读者彻底弄懂C++的原理,彻底解惑C++,使其知其然更知其所以然。此书是一本全面了解C++不可多得的案头必备图书。

图像合成是基于像素的运算,即在两个图像进行合成时,逐像素进行合成。
需要用到的QPainter类中的函数如下
在这里插入图片描述
对alpha通道的处理(预乘alpha)
在这里插入图片描述

1、Proter-Duff合成公式
在这里插入图片描述
2、QPainter::CompositionMode枚举,见表12-30,合成的效果见图12-83
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例12.40:图像合成示例
void paintEvent(QPaintEvent *e){QPainter pr;
//1、使用预乘alpha格式可提高运行速度QImage pi1(150,200,QImage::Format_ARGB32_Premultiplied);	//源,将绘制绿色图像QImage pi2(150,200,QImage::Format_ARGB32_Premultiplied);	//目标,将绘制红色图像
//2、绘制两个三角形路径QPainterPath ph; ph.moveTo(0,0);  ph.lineTo(150,0); ph.lineTo(150,180); ph.lineTo(0,0);QPainterPath ph1; ph1.moveTo(0,0); ph1.lineTo(0,180);ph1.lineTo(150,0); ph1.lineTo(0,0);
//3、用于填充三角形的画刷QBrush bs(QColor(0,255,0,100)); 	//QColor()第4个参数就是alpha通道的值QBrush bs1(QColor(255,0,0,255));
//4、创建图像:在pi1和pi2上使用路径绘制两个三角形
//注:使用alpha为0的颜色填充整个图像,可保证在绘制的三角形区域之外的alpha通道的值
//不会对合成产生影响。
pr.begin(&pi1);	pi1.fill(QColor(255,255,255,0));     pr.fillPath(ph,bs);   	pr.end();
pr.begin(&pi2);    	pi2.fill(QColor(255,255,255,0));    	pr.fillPath(ph1,bs1);   pr.end();
//在QWidget上绘制pi1(源)和pi2(目标)
pr.begin(this);	pr.drawImage(180,11,pi1);	pr.drawImage(400,11,pi2);	pr.end();
//5、开始合成图像,图像需要绘制在QImage上才能见到效果。pr.begin(&pi2);  				//这是目标图像,红色//可在以下语句使用QPainter::CompositionMode的枚举值逐一验证效果。pr.setCompositionMode(QPainter::CompositionMode_SourceAtop);pr.drawImage(0,0,pi1);  	//源图像,绿色pr.end();
//6、在QWidget上绘制合成后的图像pi2。pr.begin(this);    pr.drawImage(11,11,pi2);    pr.end();
//7、若使用以下语句把两个QImage直接在QWidget上合成,可能会得不到想要的结果/*    	pr.begin(this);pr.drawImage(11,11,pi2);pr.setCompositionMode(QPainter::CompositionMode_SourceIn);pr.drawImage(11,11,pi1);pr.end();		*/
//8、以下语句可输出两图像合成后相交区域的颜色,输出的颜色为ARGB(1, 0.607843, 0.392157, 0)
QColor c1= pi2.pixelColor(78,30);   qDebug()<<c1;	}

运行结果(见图12-84)及说明
在这里插入图片描述

计算步骤如下:
1、计算源和目标图像的alpha值和预乘alpha颜色。
在这里插入图片描述
2、本示例合成模式为QPainter::CompositionMode_SourceAtop,其计算公式为
[Da , ScDa + Dc(1 - Sa) ]
3、计算各区域的图像
在这里插入图片描述
其余模式读者可自行计算,需要注意的是,在显示alpha不为0或1的图像时,显示的色号并不一定是原色号,比如本示例的ARGB =[100,0,255,0];即alpha为100的纯绿色,显示在QWidget上的颜色为RGB = [146,246,146]。

本文作者:黄邦勇帅(原名:黄勇)

在这里插入图片描述


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

相关文章

PHP图片与文字合成

public function coupon_image($coupon){$userName $coupon[username];//合成的文字$path public_path();//这里我的查找路径方法&#xff0c;你用你自己的即可ob_clean();$types array(1 > "gif", 2 > "jpeg", 3 > "png");//图片类…

PS素材合成照片

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、最终效果图二、过程1.素材2.工作面板 总结 前言 利用素材合成照片 工作环境&#xff1a;Photoshop2022、win10 一、最终效果图 二、过程 1.素材 图 图 …

JAVA (Graphics2D)解决合成图片失真问题

附对比图&#xff1a; 合成后失真严重 代码优化后&#xff1a; 原代码&#xff1a; 参数解释&#xff1a; 1. img为你需要把他合成到A图片上的B图片&#xff0c;以下简称为章 2. srcImagePath为A图片的绝对路径 3. targetPath为合成后的图片输出路径 4. x,y为章需要合成到…

Java实现图片合成

功能 竖向合成多张大小不一致的图片,以最宽图片的为宽为合成后的宽度, 高为所有图片的总高度.图片宽度没有达到合成的宽度则填充部分使用白色画布填充. 代码 /*** 多张图片进行竖向合并成一张图片* param imageFiles 图片文件* param dstPath 合成图片路径* param hasLine 是…

html5 图片合成,H5案例分享:图片合成

图片合成 图片合成是h5案例中常用的展现方式,成功案例也有很多,譬如: 今天,小五就一个小demo来和大家磨叨磨叨图片合成的具体实现方法。 一、界面样式: 二、所用技术: easeljs + interact.js,easeljs是方便对canvas进行操作,interact.js主要是用来调整图片的位置大小的…

Python照片合成

文章目录 前言Github效果实现过程整体代码 前言 看电影的时候发现一个照片墙的功能&#xff0c;觉得这样生成照片挺好玩的&#xff0c;于是就动手用Python做了一下&#xff0c;觉得用来作照片纪念的效果可能会不错。 P:后面了解到我想做的功能叫蒙太奇拼图&#xff0c;所以这…

Python:合成图片

简介&#xff1a;PIL库中Image库封装了很多对图片处理的函数&#xff0c;支持对图片进行合成等操作。 相关攻略&#xff1a; python: ocr简单示例 - 识别验证码 python&#xff1a;彩色照转黑白照 python&#xff1a;个性签名 Python&#xff1a;利用cv2模块对图片进行灰度…

如何编辑图片合成图片?让我们来看看这些合成方法

相信大家在日常出行的时候&#xff0c;都会遇到想要和自己的朋友合照这种情况&#xff0c;却会因为社恐而不敢去向他人求助或者不想麻烦他人。所以通常我们会在同一个场景中拍摄照片&#xff0c;然后通过后期编辑将这些图片组合在一起&#xff0c;那么有的朋友会问&#xff0c;…

信息流产品和内容推荐算法

&#xff08;一&#xff09;什么是信息流产品 当下&#xff0c;信息流&#xff08;资讯&#xff09;和短视频是唯一两个在用户领域保持好的增长事态的细分行业。像其他比较成熟的互联网细分行业&#xff0c;比如说移动社交&#xff0c;电商&#xff0c;OTO这个细分行业&#x…

O2O商城系统,适合本地电商发展的商城系统!

说起商城系统&#xff0c;最适合本地电商发展的要数O2O商城系统了&#xff0c;O2O商城系统有什么优势? 一、本地O2O商城系统对商家的好处 1、本地O2O商城系统对消费人群定位比较明确&#xff0c;针对性强&#xff0c;而且本地的人消费习惯都比较了解。这样也容易形成固定的…

[转]从本地电子商务中走出来,6个很好的O2O模式解析

谓O2O就是线上到线下&#xff08;Online to Offline&#xff09; 请看以下几个非常好的O2O模式&#xff1a; Uber Uber是一个允许你通过手机购买一个私家车搭乘服务的应用。其运作方式如下&#xff1a;下载Uber应用&#xff0c;发出打车请求&#xff1b;几分钟内一辆私家车来到…

Oauth2协议

Oauth2协议 Oauth2简介角色常用术语令牌类型特点 授权模式授权码模式&#xff08;Authorization Code&#xff09;简化授权模式&#xff08;Implicit&#xff09;密码模式&#xff08;Resource Owner PasswordCredentials&#xff09;客户端模式&#xff08;Client Credentials…

2021年中国医药O2O行业发展现状、发展问题及发展建议分析[图]

医药O2O模式指的是基于线下药店&#xff0c;利用现存资源&#xff0c;将门店的功能从售药转变为体验、提货和配送&#xff0c;贴合当地需求&#xff0c;完成和用户的最终接轨。 随着疫情防控成为常态化&#xff0c;医药电商与数字医疗也迎来了新的发展。医药的网上销售呈现出逐…

中国IT运维O2O市场发展研究及十四五前景规划分析报告2022-2027年

中国IT运维O2O市场发展研究及十四五前景规划分析报告2022-2027年 第1章:IT运维O2O的概念界定与内涵1.1 IT运维的概念界定与内涵 1.1.1 IT运维的概念 1.1.2 IT运维的演化历程 1.1.3 IT运维的内容 1.1.4 IT运维的流程 1.1.5 IT运维的价值 1.2 IT运维O2O的概念界定与内涵…

案例直播 | Pulsar Summit Asia 2022:Day 1 - 分论坛 1:腾讯、华为、有道、vivo、科大讯飞...

关于 Pulsar Summit Pulsar Summit 是 Apache Pulsar 社区年度盛会&#xff0c;它将分布在世界各地的 Apache Pulsar 项目 Contributor、Committer 和各企业 CTO/CIO、开发者、架构师、数据科学家&#xff0c;以及消息和流计算社区的精英召集在一起。于此盛会&#xff0c;大家分…

高德导航免费,那他靠什么收入?

来源 &#xff5c;一口Linux 一位工作了12年的软件工程师说&#xff1a;当你打开导航时&#xff0c;不需要任何费用&#xff0c;还会给高德公司带来丰厚的收入。当时我不信&#xff0c;去查了相关资料后&#xff0c;才知道这个行业不简单。 出门外出&#xff0c;对路线不熟时&a…

全球及中国前置汽车中冷器行业需求趋势分析及发展规划研究报告2021-2027年版

全球及中国前置汽车中冷器行业需求趋势分析及发展规划研究报告2021-2027年版 2020年,全球前置汽车中冷器市场规模达到了XX百万美元,预计2027年可以达到XX百万美元,年复合增长率(CAGR)为XX% (2021-2027)。中国市场规模增长快速,预计将由2020年的XX百万美元增长到2027年的X…

智能家居市场应采用精准营销策划模式

智能家居在全世界的发展都属于新鲜事物&#xff0c;在中国市场&#xff0c;智能家居行业参与进来的企业众多&#xff0c;包括跨国企业也包括本土的强势品牌都参与其中&#xff0c;唐太子、霍尼韦尔、莫顿、新加坡NICO、上海索博、广东安居宝、波创科技、海尔集团、天津瑞朗、联…

O2O营销结构思维导图模板分享

O2O营销是线上线下营销&#xff0c;随这互联网科技的发展&#xff0c;很多公司的业务从线下扩展到线上。但是在如此多行业的竞争下&#xff0c;怎样做好线上业务就成为最大的麻烦&#xff0c;下面是分享的O2O营销结构思维导图模板以及利用在线工具编辑思维导图的操作方法&#…

新项目从零到一DDD实战思考与总结

抱歉了&#xff0c;前面几篇DDD的文章我删除了&#xff0c;本篇是前面发表的几篇DDD的汇总&#xff0c;内容有修改。 领域驱动设计&#xff08;DDD&#xff09;是一种业务领域建模方法论、业务架构设计方法论&#xff0c;战略设计阶段从业务领域视角划分领域边界&#xff0c;抽…