C++| QT图片调整透明度叠加

news2024/9/20 11:32:35

QT图片调整透明度叠加

  • 实际效果
  • 界面UI
    • 放置控件
    • 设置布局
    • 界面自适应
  • 代码
    • 项目工程的文件
    • 初始化
    • 按钮功能
    • 滑动条功能
    • 图片调整透明度叠加

实际效果

三个图片(QLabel)显示,两个按钮(QPushButton)加载图片,一个(Slider)滑动条。
三个图片:从左到右,显示图像A、图像B以及透明度叠加后的图像。
两个按钮:“打开图像A”打开图像A并显示;“打开图像B”打开图像B并显示。
滑动条:控制透明度比例。
在这里插入图片描述

界面UI

放置控件

把控件按照前面“实际效果”取出并放置。

设置布局

一个垂直布局包括了两个水平布局。
在这里插入图片描述
布局以及控件相关的名字。
在这里插入图片描述

界面自适应

随着窗口调整
思路:centralwidget变为栅格布局(虽然前面我的图片上已经是,但是新建的时候通常是不能修改的表单布局Form Layout)。
方法:工具->界面编辑器->栅格布局

调整布局中比例
情况:希望垂直布局中上面部分比下面大。
方法:右键对象“upLayout”升级为Qwidget,让其具有Qwidget属性。设置sizePolicy属性,修改其垂直伸展因子,让其为1即可。此时“downLayout”默认垂直伸展因子为0,只会保持一个建议尺寸。
补充知识点:甚至布局中的伸展因子设置的是不同元素在其中自适应的比例,为0时会保持一个建议尺寸。

处理QLabel添加图片后,布局错乱
原因:为QLabel添加图片通常都会分辨率大于分配的,会挤压其它空间,从而导致布局错乱。
表现:我遇到情况表现为,水平方向缩小一定大小后无法缩小。
方法:修改“upLayout” 的sizePolicy属性,让水平策略和垂直策略都为Ignored。

在这里插入图片描述

代码

项目工程的文件

在这里插入图片描述

初始化

变量:在界面cpp文件中声明两个地址全局变量,记录打开图像A和B的路径。

QString pathA,pathB;

滑动条值:在界面cpp文件中的构造函数里面初始化滑动条的范围和初始值。

PicMix::PicMix(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::PicMix)
{
    ui->setupUi(this);

    ui->sliderTrans->setMaximum(100);
    ui->sliderTrans->setMinimum(0);
    ui->sliderTrans->setValue(50);
}

图片调整透明度叠加函数的添加:在界面的h和cpp文件中添加。

void display_picMix(int value);

按钮功能

采用自动关联信号和槽的方法,右键“按钮”->转到槽。
在这里插入图片描述
代码:

void PicMix::on_btnA_clicked()
{
    pathA=QFileDialog::getOpenFileName();

    ui->labelA->setScaledContents(true);
    ui->labelA->setPixmap(pathA);

    display_picMix(ui->sliderTrans->value());
}


void PicMix::on_btnB_clicked()
{
    pathB=QFileDialog::getOpenFileName();

    ui->labelB->setScaledContents(true);
    ui->labelB->setPixmap(pathB);

    display_picMix(ui->sliderTrans->value());
}

滑动条功能

采用自动关联信号和槽的方法,右键“按钮”->转到槽。
在这里插入图片描述
代码:

void PicMix::on_sliderTrans_valueChanged(int value)
{
    display_picMix(value);
}

图片调整透明度叠加

函数输入滑条的值,然后计算图像A和图像B的像素值,根据value调整透明度后叠加显示出来。

void PicMix::display_picMix(int value){
    // value是滑动条当前值
    // 地址是否存在
    if(pathA.isNull()||pathB.isNull())
        return ;
    // 读取图片A和图片B的数据
    QImage imageA,imageB;
    imageA.load(pathA);
    imageB.load(pathB);
    // 获取图片高度和宽度,选择最小的
    int w,h;
    w=qMin(imageA.width(),imageB.width());
    h=qMin(imageA.height(),imageB.height());
    // 声明imageMix用来存储叠加后的图像数据
    QImage imageMix(w,h, QImage::Format_ARGB32);

    float alpha=value/100.0;// 计算透明程度
    QColor colorA,colorB;
    int r,g,b;
    for(int x=0;x<w;x++){
        for(int y=0;y<h;y++){
            colorA=QColor(imageA.pixel(x,y));
            colorB=QColor(imageB.pixel(x,y));
            r=colorA.red()*alpha+colorB.red()*(1-alpha);
            g=colorA.green()*alpha+colorB.green()*(1-alpha);
            b=colorA.blue()*alpha+colorB.blue()*(1-alpha);
            imageMix.setPixel(x,y,qRgb(r,g,b));
        }
    }

    ui->labelMix->setScaledContents(true);
    ui->labelMix->setPixmap(QPixmap::fromImage(imageMix));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java学习】反射和枚举详解

所属专栏&#xff1a;Java学习 &#x1f341;1. 反射 在程序运行时&#xff0c;可以动态地创建对象、调用方法、访问和修改字段&#xff0c;以及获取类的各种属性信息&#xff08;如成员变量、方法、构造函数等&#xff09;&#xff0c;这种机制就称为反射 反射相关的类 类名用…

【算法】马踏棋盘(骑士周游)问题回溯算法实现以及使用贪心算法优化

目录 1.游戏规则 2.算法分析 3.解决步骤和思路 4.马踏棋盘算法的代码实现 4.1计算马儿还能走哪些位置 4.2马踏棋盘的核心代码 4.3马踏棋盘算法完整代码 4.4使用贪心算法进行优化 4.4.1思路 4.4.2代码实现 1.游戏规则 将马儿随机放在国际象棋的 8*8 棋盘的某个方格中…

阶段练习——minishell

目录 &#xff08;一&#xff09;文件复制&#xff08;my_cp函数&#xff09; &#xff08;二&#xff09;文件内容查看&#xff08;my_cat函数&#xff09; &#xff08;三&#xff09;切换目录&#xff08;my_cd函数&#xff09; &#xff08;四&#xff09;列出目录内容…

一款专为IntelliJ IDEA用户设计的插件,极大简化Spring项目中的API调试过程,功能强大(附源码)

前言 在软件开发过程中&#xff0c;尤其是Spring MVC(Boot)项目中&#xff0c;API调试调用是一项常见但繁琐的任务。现有的开发工具虽然提供了一些支持&#xff0c;但往往存在效率不高、操作复杂等问题。为了处理这些痛点&#xff0c;提升开发效率&#xff0c;一款新的工具应运…

python 捕获异常

捕获指定异常 e 是保存的异常信息 捕获多个异常

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现&#xff0c;无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例&#xff0c;在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台&#xff1a;曙光超算互联网平台SCNet GPU/DCU&#xff1a;异构加速卡AI 显存64GB PCIE&#…

Selenium + Python 自动化测试18(数据驱动实现测试)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了数据驱动测试中如何读取Excel文件&#xff0c;今天我们试着进一步深入学习数据驱动。 本篇文章我们讨论一下如何使用数据驱动思想实现测试。 1、数据驱动框架…

从零开始学cv-5: 图像的仿射变换

文章目录 一&#xff0c;简介&#xff1a;二&#xff0c;图像仿射变换详解2.1&#xff0c;图像平移&#xff1a;2.2 &#xff0c;图像旋转&#xff1a;2.3&#xff0c;仿射变换&#xff1a; 一&#xff0c;简介&#xff1a; 仿射变换&#xff08;Affine Transformation 或 Aff…

Lumina学术引擎免费问世,性能超谷歌学术5倍

Lumina介绍 Lumina是一款完全免费的AI学术搜索引擎&#xff0c;借助强大的数据库和高效的匹配速度。利用超过 15 种模型从超过 100 万篇期刊文章中找出最相关的来源&#xff0c;从而构建答案。搜索结果相关性平均比谷歌学术高出5倍&#xff0c;支持超1亿研究对象搜索&#xff…

8.18日学习打卡---Spring Cloud Alibaba(五)

8.18日学习打卡 目录&#xff1a; 8.18日学习打卡 RocketMQ什么是RocketMQ生产者和消费者技术架构 RocketMQ安装与配置环境搭建与测试RocketMQ管理命令 RocketMQ发送消息普通消息顺序消息之全局消息顺序消息之局部消息消费者消费消息延迟消息延迟消息代码实现单向消息批量消息过…

【HarmonyOS】云开发-用户自动认证

背景 华为云服务提供了统一认证的云服务&#xff0c;支持手机、邮箱等自定义登录服务&#xff0c;并且提供了免费使用的额度&#xff0c;这样子方便中小企业或者项目快速的开发工作。下面是支持的认证方式&#xff1a; 操作步骤 1.AGC(AppGallery Connect)创建项目 在AGC界…

C++ | Leetcode C++题解之第342题4的幂

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) 0 && n % 3 1;} };

zabbix监控进程、日志、主从状态和主从延迟

zabbix监控进程、日志、主从状态和主从延迟 监控进程1、下载服务2、编写脚本3、编写zabbix_agentd.conf4、新建监控项配置触发器5、查看邮件 监控日志1、上传log.py的2、编写zabbix_agentd.conf3、新建监控项配置触发器 监控数据库主从状态1、编写/etc/hosts&#xff08;master…

IOS 09 R.swift框架和使用方法

R.swift框架主要是实现通过类字段访问字符串&#xff0c;图片&#xff0c;等资源&#xff1b;类似Android那边通过R类访问&#xff0c;好处是有提示&#xff0c;如果缺少资源&#xff0c;直接就是编译错误&#xff1b;OC类似的功能叫R.objc。 添加依赖 添加依赖 #将资源&…

第八周:机器学习笔记

第八周机器学习笔记 摘要Abstract机器学习1. 鱼和熊掌和可兼得的机器学习1.1 Deep network v.s. Fat network 2. 为什么用来验证集结果还是不好&#xff1f; Pytorch学习1. 卷积层代码实战2. 最大池化层代码实战3. 非线性激活层代码实战 总结 摘要 本周学习对李宏毅机器学习视…

AI学习记录 - Word2Vec 超详细解析

创作不易&#xff0c;点个赞 我们有一堆文本&#xff0c;词汇拆分 sentences ["jack like dog", "jack like cat", "jack like animal","dog cat animal", "banana apple cat dog like", "dog fish milk like"…

URP平面阴影合批处理 shadow

闲谈 相信大家在日常工作中发现了一个问题 &#xff0c; urp下虽然可以做到3个Pass 去写我们想要的效果&#xff0c;但是&#xff0c;不能合批&#xff08;不能合批&#xff0c;那不是我们CPU要干冒烟~&#xff01;&#xff09; 好家伙&#xff0c;熊猫老师的偏方来了 &#x…

【数值方法-Python实现】Crout分解+追赶法实现

涉及Crout分解、追赶法的线性方程组求解方法的Python实现。 原文链接&#xff1a;https://www.cnblogs.com/aksoam/p/18366119 Codes def CroutLU(A:np.ndarray)->Tuple[np.ndarray,np.ndarray]:"""Crout LU分解算法,ALUinput:A: (n,n) np.ndarray,方阵out…

DrissionPage自动化获取城市数据内容

一、获取页面内容 二、最终结果 上海市 约收录140个指标 查看98075次 人均GDP 153299元 公交车 17899辆 户籍人口 1469.3万人 三、代码 from DrissionPage._pages.chromium_page import ChromiumPage import time page ChromiumPage() page.get(https://www.swguancha.com/…

【Delphi】中多显示器操作基本知识点

提要&#xff1a; 目前随着计算机的发展&#xff0c;4K显示器已经逐步在普及&#xff0c;笔记本的显示器分辨率也都已经超过2K&#xff0c;多显示器更是普及速度很快。本文介绍下Delphi中操作多显示器的基本知识点&#xff08;Windows系统&#xff09;&#xff0c;这些知识点在…