QWidget的ui界面绘制成图片

文章目录

  • 源文件
  • 源码解释
  • 效果
  • 修复图片清晰度

源文件

#include "widget.h"
#include "ui_widget.h"#include <QPixmap>
#include <QDir>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 构造一个给定大小的像素图。QPixmap pixmap(this->size());// 将目标this窗口界面绘制到源目标图片里面this->render(&pixmap);QSize newSize(800,600);// 调整图片大小 保持纵横比pixmap = pixmap.scaled(newSize,Qt::KeepAspectRatio);QDir dir;dir.cdUp();QString path = dir.currentPath();// 保存图片QString filemname  = path + "img.png";pixmap.save(filemname);}Widget::~Widget()
{delete ui;
}

源码解释

这段代码是一个包含"widget.h"和"ui_widget.h"头文件的C++程序。

接下来,它引入了两个Qt库的头文件:QPixmap和QDir。

Widget类是一个继承自QWidget的自定义窗口部件。构造函数使用提供的父对象指针创建Widget对象,并通过调用ui的setupUi函数来设置窗口的用户界面。

接下来,代码创建了一个Pixmap对象pixmap,其大小与当前窗口的大小相同。

然后,代码通过调用render函数,将当前窗口界面绘制到pixmap中,实现截屏的效果。

接下来,代码创建了一个新的大小为800x600的QSize对象newSize。

然后,通过调用scaled函数,将pixmap对象调整为newSize大小,并保持图片的纵横比。

然后,代码创建了一个QDir对象dir,并调用cdUp函数将当前目录切换到上一级目录。

接下来,代码获取当前目录的路径,并将其赋给QString类型的变量path。

然后,通过将path和"img.png"连接起来,创建了一个QString类型的文件名变量filemname。

最后,代码调用pixmap对象的save函数,将图片保存到filemname指定的路径中。

析构函数中,代码通过delete操作符释放ui指针指向的内存,防止内存泄漏。

效果

在这里插入图片描述
在这里插入图片描述

修复图片清晰度

当绘制出来的图片模糊时,你可以尝试以下方法来改善图片质量:

  1. 增加像素密度:
QPixmap pixmap(this->size() * 2); // 使用当前窗口大小的两倍像素密度
this->render(&pixmap);
pixmap = pixmap.scaled(this->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);

通过创建一个像素密度更高的Pixmap对象,然后进行缩放,可以增加图片的清晰度。

  1. 使用更高质量的缩放算法:
pixmap = pixmap.scaled(newSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);

将scaled函数的第三个参数设置为Qt::SmoothTransformation,可以使用更平滑的缩放算法。

  1. 调整绘制参数:
QPainter painter(&pixmap);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
this->render(&painter);

在绘制过程中,使用setRenderHints函数设置抗锯齿选项和平滑的Pixmap转换,可以减少图像的锯齿感和模糊度。

  1. 使用OpenCV进行图像处理:可以使用OpenCV库进行更高级的图像处理操作,例如图像增强和滤波。以下是使用OpenCV进行图像平滑处理的示例:
#include <opencv2/opencv.hpp>QImage image = pixmap.toImage();cv::Mat cvImage(image.height(), image.width(), CV_8UC4, image.bits(), image.bytesPerLine());
cv::Mat cvImageSmooth;cv::GaussianBlur(cvImage, cvImageSmooth, cv::Size(5, 5), 0);QImage smoothImage(cvImageSmooth.data, cvImageSmooth.cols, cvImageSmooth.rows, cvImageSmooth.step, QImage::Format_ARGB32);
QPixmap smoothedPixmap = QPixmap::fromImage(smoothImage);

以上示例使用OpenCV的GaussianBlur函数对图像进行高斯平滑处理,然后将结果转换回QPixmap对象。

这些是一些常用的方法来改善绘制出的图片的模糊度。你可以根据具体情况选择适合的方法来提高图片质量。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络与卷积神经网络

全连接神经网络 概念及应用场景 全连接神经网络是一种深度学习模型&#xff0c;也被称为多层感知机&#xff08;MLP&#xff09;。它由多个神经元组成的层级结构&#xff0c;每个神经元都与前一层的所有神经元相连&#xff0c;它们之间的连接权重是可训练的。每个神经元都计算…

cobbler自动化安装CentOS、windows和ubuntu

环境介绍 同时玩cobbler3.3和cobbler2.8.5 cobbler3.3 系统CentOS8.3 VMware虚拟机 桥接到物理网络 IP: 192.168.1.33 cobbler2.8.5 系统CentOS7.9 VMWare虚拟机 桥接到物理网络 IP&#xff1a;192.168.1.33 安装cobbler3.3 yum源修改 cat /etc/yum.repo.d/Cento…

如何通过内网穿透实现外部网络对Spring Boot服务端接口的HTTP监听和调试?

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

一篇文章带你了解-selenium工作原理详解

前言 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c…

Spring Security存在认证绕过漏洞 CVE-2021-22096

文章目录 0.前言1.参考文档2.基础介绍漏洞影响范围&#xff1a;官方说明&#xff1a;修复版本&#xff1a;漏洞利用步骤&#xff1a;修复方式&#xff1a; 3.解决方案 0.前言 背景&#xff1a;项目被扫到Spring Boot 的漏洞&#xff0c;严格的说应该是Spring Security 组件的漏…

FPGA时序分析与约束(1)——组合电路时序

写在最前面&#xff1a; 关于时序分析和约束的学习似乎是学习FPGA的一道分水岭&#xff0c;似乎只有理解了时序约束才能算是真正入门了FPGA&#xff0c;对于FPGA从业者或者未来想要从事FPGA开发的工程师来说&#xff0c;时序约束可以说是一道躲不过去的坎&#xff0c;所以从这篇…

ZKP硬件加速

1. 引言 本文重点关注&#xff1a; 1&#xff09;何为硬件加速&#xff1f;为何需要硬件加速&#xff1f;2&#xff09;ZKP的关键计算原语&#xff1a; Multiscalar MultiplicationNumber Theoretic TransformationArithmetic Hashes 3&#xff09;所需的硬件资源4&#xff0…

ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红

a-auto-complete表单自动搜索返回列表中的关键字标红 通常在做关键字标红的场景&#xff0c;都是后端返回html结构&#xff0c;前端直接渲染实现&#xff0c;但是如果需要前端处理的话&#xff0c;实现也是很简单的&#xff0c;接下来我直接上应用场景吧 应用场景就是通过关键…

Three.js实现模型,模型材质可拖拽效果 DragControls

Three.js提供了一个拖拽的API DragControls 用于实现模型材质拖拽效果 DragControls&#xff1a;是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数&#xff1a; objects&#xff1a;一个包含需要…

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像...

原文链接&#xff1a;http://tecdat.cn/?p24346 在今天产品高度同质化的品牌营销阶段&#xff0c;企业与企业之间的竞争集中地体现在对客户的争夺上&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 “用户就是上帝”促使众多的企业不惜代价去争夺尽可能多的客…

(笔记三)opencv图像基础操作

强调&#xff1a;本文只为学习记录做笔记 详细可参考opencv官网 &#xff1a;https://docs.opencv.org/4.1.1/d0/d86/tutorial_py_image_arithmetics.html &#xff08;1&#xff09;将cv2的BGR模式改为RGB模式 #!/usr/bin/env python # -*- coding:utf-8 -*- ""&q…

【Go 基础篇】Go语言数组内存分析:深入了解内部机制

在Go语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的元素。虽然数组在应用中非常常见&#xff0c;但了解其在内存中的存储方式和分配机制仍然是一个重要的课题。本文将深入探讨Go语言数组的内存分析&#xff0c;揭示数组在内存中的布局和分配…