基于Qt 的可视化图片处理程序——图片的加载与保存

news2024/11/29 3:51:49

基于Qt 的可视化图片处理程序——图片的加载与保存

  • Chapter1 基于Qt 的可视化图片处理程序——图片的加载与保存
    • 图片的加载
    • 图片加载到 Label
    • 完整代码
    • 图片的保存
    • 保存图片
    • 完整代码


在这里插入图片描述

void MainWindow::loadPixmap()
{
    QImage img,image;
    QPixmap pixmap;

    LoadPicPath = QFileDialog::getOpenFileName(this,tr("选择图片"),"C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
    img.load(LoadPicPath);
    image = img.scaled(ui->PicLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); // Qt::KeepAspectRatio 按比例缩放  Qt::SmoothTransformation 缩放不失帧

    pixmap = QPixmap::fromImage(image);
    ui->PicLabel->clear();
    ui->PicLabel->setPixmap(pixmap);

}

Chapter1 基于Qt 的可视化图片处理程序——图片的加载与保存

原文链接

图片的加载

点击按钮选择文件
首先要确定,使用 Qt 中 QFileDialog 库中的 getLoadFile 进行选择文件。

代码如下:

LoadPicPath = QFileDialog::getOpenFileName(this,"选择图片","C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
// getOpenFile 参数包含窗口的父类,窗口名称,默认选择地址,和要选择的文件格式
// 设置文件扩展名过滤,注意用双分号间隔

运行效果如下:
在这里插入图片描述
在这里插入图片描述

图片加载到 Label

在 Qt 中,我们一种最常用的图片加载方式就是使用 QImage 库,此处我们通过 QImage 加载图片,之后通过加载到 QPixmap 中,最终显示在 Label 上

首先声明 QImage 变量,并加载我们指定路径下的图片:

QImage img;
img.load(LoadPicPath);
// LoadPicPath 是我们选择的文件的路径及名称

在成功加载图片之后,我们通过将图加载到 QPixmap 上,最终将图片显示在 Label 上:

image = img.scaled(this->ui->PicLabel->size(),Qt::KeepAspectRatio, Qt::SmoothTransformation);
/*
首先要按照比例合理缩放图片的大小,并且在缩放的过程中要保证图片不失帧
Qt::KeepAspectRatio 按比例缩放  Qt::SmoothTransformation 缩放不失帧
*/
QPixmap pixmap = QPixmap::fromImage(image);
// 在pixmap中加载图片
this->ui->PicLabel->setPixmap(pixmap)
 
// 将图片显示到 Label 中

运行效果如下:
在这里插入图片描述

完整代码

void MainWindow::Load(){    // 加载图片
    QImage img;
    img.load(LoadPicPath);
    w_initial = img.width();
    h_initial = img.height();
    image = img.scaled(this->ui->PicLabel->size(),Qt::KeepAspectRatio, Qt::SmoothTransformation);
    pixmap = QPixmap::fromImage(image);
    // Qt::KeepAspectRatio 按比例缩放  Qt::SmoothTransformation 缩放不失帧
    this->ui->PicLabel->clear();
    this->ui->PicLabel->setPixmap(pixmap);
    this->getpixel();
}
    
    void MainWindow::on_actionLoadPic_triggered()    // 点击事件
{
    if(LoadPicPath == ""){
        if_load_save = false;
    }
    else{
        qDebug()<<LoadPicPath;
        if_load_save = true;
        qDebug()<<"if_load_save = "<<if_load_save;
    }
    LoadPicPath = QFileDialog::getOpenFileName(this,"选择图片","C://Users//ppqpp//Pictures","Pic Files (*.jpg;*.jeg;*.png;*.gif);;All Files (*);");
    if(if_load_save){
        savedialog->show();
        savedialog->exec();
    }
    else{
        //        this->init_all();
        this->Load();
    }
}

图片的保存

点击按钮保存路径
与加载图片的方法一致,使用 getSaveFile 函数选择要保存图片的路径:

MainWindow::SavePicPath = QFileDialog::getSaveFileName(this,"C://Users//ppqpp//Pictures",MainWindow::LoadPicPath,"Pic Files (*);");

运行效果如下:
在这里插入图片描述
在这里插入图片描述

保存图片

在保存图片之前,我们需要先提取要进行保存的目标图片,通过一种类似于截屏的方式 pixmap()->toImage() 对图片进行提取,然后缩放到原来的大小,最后进行保存

代码如下:

QImage img = this->ui->PicLabel->pixmap()->toImage().scaled(w_initial,h_initial,Qt::KeepAspectRatio, Qt::SmoothTransformation);
img.save(SavePicPath);

完整代码

void SaveDialog::on_pushButton_clicked()
{
    MainWindow::SavePicPath = QFileDialog::getSaveFileName(this,"C://Users//ppqpp//Pictures",MainWindow::LoadPicPath,"Pic Files (*);");
    this->ui->PathEdit->setText(MainWindow::SavePicPath);
}
 
void SaveDialog::on_SaveButton_clicked()
{
    qDebug()<<"Save new Pic"<<MainWindow::LoadPicPath;
    if(this->ui->PathEdit->text() != ""){
        emit to_save();
        if(MainWindow::if_load_save){
            qDebug()<<"if_load_save = "<<MainWindow::if_load_save;
            qDebug()<<"save_to_load";
            MainWindow::if_load_save = false;
            emit save_to_load();
        }
        this->close();
    }
}
 
 
void MainWindow::Cover_save(){
    qDebug()<<"Cover_save";
    QImage img = this->ui->PicLabel->pixmap()->toImage().scaled(w_initial,h_initial,Qt::KeepAspectRatio, Qt::SmoothTransformation);
    img.save(SavePicPath);
}

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

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

相关文章

(免费领源码)java#ssm#mysql爱心捐赠物资维护系统09536-计算机毕业设计项目选题推荐

摘要 随着信息技术的快速发展&#xff0c;计算机应用已经进入成千上万的家庭。随着物资数量的增加&#xff0c;物资库存管理也存在许多问题。物资数据的处理量正在迅速增加&#xff0c;原来的手工管理模式不适合这种形式。使用计算机可以完成数据收集、处理和分析&#xff0c;减…

vue3框架全局修改样式(字体颜色以及初始化定义基础elemplent颜色)

问题1、全局修改vue管理系统框架的字体颜色&#xff08;index.scss目录下修改&#xff09; 问题2、vue3中使用elemplent-plus中的el-select组件&#xff0c;默认选中二级或三级的一个数据&#xff0c;没有显示label只显示了id 问题如下 原因是因为 这个属性为true了&#xff0…

springboot+mybatis查询两次数据库结果不一致

最近遇到个bug记录一下。情景再现&#xff1a;在一个方法里有多次查询数据库的操作&#xff0c;但查询出的数据字段会被自动翻译。&#xff08;比如1翻译成是&#xff0c;2翻译成否&#xff09;。原因&#xff1a;mybatis缓存会被代码修改。在同一个sqlsession下&#xff0c;第…

彩色颜料背景的团建活动策划PPT模板

这是一套彩色颜料背景的团建活动策划PPT模板&#xff0c;共24页&#xff1b; PPT模板封面&#xff0c;使用了彩色颜料墨迹背景图片。中间放置带有阴影效果的白色矩形文本框&#xff0c;填写团建活动策划PPT标题。界面风格充满青春朝气。 PowerPoint模板内容页&#xff0c;由2…

Rust语言和curl库编写程序

这是一个使用Rust语言和curl库编写的爬虫程序&#xff0c;用于爬取视频。 use std::env; use std::net::TcpStream; use std::io::{BufReader, BufWriter}; ​ fn main() {// 获取命令行参数let args: Vec<String> env::args().collect();let proxy_host args[1].clon…

JVM 内存和 GC 算法

文章目录 内存布局直接内存执行引擎解释器JIT 即时编译器JIT 分类AOT 静态提前编译器&#xff08;Ahead Of Time Compiler&#xff09; GC什么是垃圾为什么要GC垃圾回收行为Java GC 主要关注的区域对象的 finalization 机制GC 相关算法引用计数算法&#xff08;Reference Count…

【嵌入式开发学习】__软件工程师的关键原则-18个系统设计概念

目录 前言 01. 域名系统 (DNS) 02. 负载均衡器 03. API 网关 04. 内容交付网络 (CDN) 05. 正向代理与反向代理 06. 缓存 07. 数据分区 08. 数据库复制 09. 分布式消息系统 10. 微服务 11. 数据库 12. 前端缓存 13. 后端缓存 14. 安全性 15. 高可用性与容错性 …

阿里云双11优惠活动:新老用户99元服务器和代金券领取攻略

2023阿里云双11优惠活动开启了&#xff0c;轻量2核2G3M带宽服务器87元一年、2核4G4M带宽165元一年&#xff0c;云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年&#xff0c;新老用户同享&#xff0c;并且续费不涨价&#xff0c;第二年99元续费。阿里云个人和企业用户还…

JAVA技术栈的有福啦!这款IDEA插件,写完代码即可调试

国产API调试工具 Apipost 推出IDEA插件&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还可以根据已有的方法帮助您快速生成 url 和 params。Apipost Helper API 调试工具 API 管理工具 API 搜索工具。 在商店中搜索或直接点击下方链接即可下载&…

天猫商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)

要获取天猫商品评论接口&#xff0c;您需要使用天猫开放平台提供的API接口。以下是一些可能有用的步骤&#xff1a; 注册并登录天猫开放平台&#xff0c;获取开发者账号。在开发者中心创建一个应用&#xff0c;获取应用的App Key和App Secret。使用天猫开放平台的API接口&…

Yolov8目标识别与实例分割——算法原理详细解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统&#xff0c;最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出&#xff0c;并随后进行了多次改进和迭代&#xff0c;产生了一系列不同版本的YOLO模型&#xff0c;如YOLOv2、YOLOv3、YOLOv4&a…

【进程控制⑦】:制作简易shell理解shell运行原理

【进程控制⑦】&#xff1a;制作简易shell&&理解shell运行原理 一.交互问题&#xff0c;获取命令行二.字串分割问题&#xff0c;解析命令行三.指令的判断四.普通命令的执行五.shell原理本质 一.交互问题&#xff0c;获取命令行 shell刚启动时就会出现一行命令行&#x…

如何建立个人百科,事半功倍

在现代社会&#xff0c;人们越来越重视个人品牌建设&#xff0c;而打造个人百科是其中重要的一环。那么&#xff0c;什么是个人百科呢&#xff1f;简单来说&#xff0c;它是一本介绍个人生平、成就和贡献的百科全书&#xff0c;其好处不言而喻。 首先&#xff0c;它可以提高个人…

vm虚拟机逆向---[GWCTF 2019]babyvm 复现【详解】

文章目录 前言题目分析CD1mov指令xor指令and其他指令 E0BF83 汇编提取编写exp 前言 好难。大家都觉得简单&#xff0c;就我觉得难是吧&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 题目分析 、 代码看着挺少&#xff0c;三个主要函数&#xff0c;一开始好像…

足足68个!Python函数合集请收好!

内置函数就是python给你提供的, 拿来直接用的函数&#xff0c;比如print.&#xff0c;input等。 #68个内置函数 # abs()   dict()   help()   min()   setattr() # all()   dir()   hex()   next()   sli…

git clone 报错:fatal: unable to access ‘https://github.com/XXXXXXXXX‘

国内使用GIT工具&#xff0c;拉取github代码&#xff0c;会因为网络原因无法成功拉取。出现如下类似情形&#xff1a; 此时更改 web URL即可&#xff0c;改用镜像的github网站替换https://github.com/。即URL里的https://github.com/换成https://hub.nuaa.cf/&#xff0c;即可…

鸿蒙应用开发之后台代理提醒

一、简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求&…

取消elementUI中table的选中状态

1、表格上绑定ref 2、清空用户选中数据 this.$refs.loopRef.clearSelection()

ATE新能源汽车充电桩自动负载测试系统

随着新能源汽车的普及&#xff0c;充电桩的需求也在不断增加&#xff0c;为了确保充电桩的性能和安全性&#xff0c;对其进行负载测试是非常重要的。ATE新能源汽车充电桩自动负载测试系统是一种专门用于检测充电桩性能的设备&#xff0c;它可以模拟各种实际使用场景&#xff0c…

swift语言下SurfGen库做的爬虫是什么样的 ?

Swift语言并没有内置的爬虫库&#xff0c;但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库&#xff0c;可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库&#x…