qt生成一幅纯马赛克图像
由于项目需要,需生成一幅纯马赛克的图像作为背景,经过多次测试成功,记录下来。
方法一:未优化方法
1、代码:
#include <QImage>
#include <QDebug>
#include <QElapsedTimer>QImage generateMosaic(int width, int height, int blockSize) {QImage image(width, height, QImage::Format_RGB888);if (blockSize <= 0) {return QImage(); // 返回空图片或处理错误}// 确保blockSize是偶数,并且不会使图像尺寸变得太小blockSize = (blockSize % 2 == 0) ? blockSize : blockSize + 1;if (image.width() < blockSize || image.height() < blockSize) {return image; // 如果blockSize太大,直接返回原图}// 计算新图片的尺寸int newWidth = image.width() / blockSize * blockSize;int newHeight = image.height() / blockSize * blockSize;qDebug() << "newWidth = " << newWidth << ", newHeight = " << newHeight;//QImage newImage(newWidth, newHeight, image.format());// 遍历每个块for (int x = 0; x < newWidth; x += blockSize) {for (int y = 0; y < newHeight; y += blockSize) {// 计算块的平均颜色QColor averageColor = QColor(0, 0, 0); // 初始化平均颜色为黑色// 用平均颜色填充整个块if((y / blockSize) % 2 == 0) {if((x/blockSize) % 2 == 0) {averageColor = QColor(60,60,60);} else {averageColor = QColor(150,150,150);}} else {if((x/blockSize) % 2 == 0) {averageColor = QColor(150,150,150);} else {averageColor = QColor(60,60,60);}}for (int bx = 0; bx < blockSize && x + bx < newWidth; ++bx) {for ( int by = 0; by < blockSize && y + by < newHeight; ++by) {image.setPixel(x+bx, y+by, qRgb(averageColor.red(), averageColor.blue(), averageColor.green()));}}}}return image;
}int main()
{QElapsedTimer elapsed_timer; elapsed_timer.start(); QImage mosicImage = generateMosaic(1280,960,40);qDebug() << "Used" << elapsed_timer.elapsed() << "milliseconds.";mosicImage.save("mosic.jpg");return 0;
}
2、效果:
运行结果
newWidth = 1280 , newHeight = 960
Used 19 milliseconds.

方法二:优化后方法
更优化的方法:
1、代码
#include <QImage>
#include <QDebug>
#include <QPainter>
#include <QElapsedTimer>QImage generateMosaic(int width, int height, QImage::Format format)
{QColor color_a(102, 102, 102); QColor color_b(128, 128, 128);QImage empty_image(width, height, format);empty_image.fill(color_a);QPainter empty_painter(&empty_image);int stride = 32;for (int i=0; i<empty_image.width(); i+=stride) {for (int j=0; j<empty_image.height(); j+=stride) {if ((i+j) % (2*stride) == 0) {empty_painter.fillRect(QRect(i, j, stride, stride), color_b);} else {empty_painter.fillRect(QRect(i, j, stride, stride), color_a);}}}return empty_image;
}int main()
{QElapsedTimer elapsed_timer; elapsed_timer.start(); QImage mosicImage = generateMosaic(1280,960,QImage::Format_RGB888);qDebug() << "Used" << elapsed_timer.elapsed() << "milliseconds.";mosicImage.save("mosic.jpg");return 0;
}
2、效果
运行效果
Used 4 milliseconds.

相关文章:
qt生成一幅纯马赛克图像
由于项目需要,需生成一幅纯马赛克的图像作为背景,经过多次测试成功,记录下来。 方法一:未优化方法 1、代码: #include <QImage> #include <QDebug> #include <QElapsedTimer>QImage generateMosa…...
python循环——九九乘法表(更加轻松的理解循环结构)
感受 首先,得明确意识到这个问题,就是我的循环结构学的一塌糊涂,完全不能很好的使用这个循环来实现各种九九乘法表达输出,这样的循环结构太差了,还需要我自己找时间来补充一下循环的使用,来拓宽自己的思考方…...
UDS诊断系列之十八故障码的状态掩码
在谈19服务的子功能之前,先说一下故障码(DTC)的状态掩码是什么。 一、状态掩码 状态掩码由八个状态位构成,客户端利用它向服务器请求与其状态相匹配的DTC信息。当服务器接收到来自客户端的请求时,它会通过过滤匹配的…...
【jvm】直接引用
目录 1. 说明2. 形式3. 特点4. 生成过程5. 作用 1. 说明 1.在Java虚拟机(JVM)中,直接引用(Direct Reference)是相对于符号引用(Symbolic Reference)而言的,它是指向内存中实际存在的…...
PythonStudio 控件使用常用方式(二十七)TActionList
PythonStudio是一个极强的开发Python的IDE工具,官网地址是:https://glsite.com/ ,在官网可以下载最新版的PythonStudio,同时,在使用PythonStudio时,它也能及时为用户升到最新版本。它使用的是Delphi的控件&…...
PDF 转Word 开源库
1. Apache PDFBox Apache PDFBox 是一个开源的 Java 库,用于创建和操作 PDF 文档。虽然 PDFBox 本身没有直接支持 PDF 转 Word 的功能,但它可以提取 PDF 内容,你可以结合其他方法将这些内容写入 Word。 添加依赖 <dependency><gr…...
Docker - 深入理解Dockerfile中的 RUN, CMD 和 ENTRYPOINT
RUN docker file 中的 RUN 命令相对来教容易理解 RUN 指令用于在构建镜像时执行命令,这些命令会在 Docker 镜像的构建过程中执行。常用于安装软件包、设置环境变量、创建目录等。RUN 指令会在镜像构建中创建新的镜像层,每个 RUN 指令都会创建一个新的镜…...
Python 函数式编程 内置高阶函数及周边【进阶篇 3】推荐
前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式,正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 ,本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识,方便自…...
【Rust光年纪】探秘Rust GUI库:从安装配置到API概览
Rust语言GUI库全方位比较:选择适合你的工具 前言 在现代软件开发中,图形用户界面(GUI)库扮演着至关重要的角色。随着Rust语言的不断发展,越来越多的优秀的GUI库也相继问世,为Rust开发者提供了更多选择。本…...
Element plus部分组件样式覆盖记录
文章目录 一、el-button 样式二、Popconfirm 气泡确认框三、Popover 气泡卡片四、Checkbox 多选框五、Pagination 分页六、Form 表单七、Table 表格 一、el-button 样式 html: <el-button class"com_btn_style">button</el-button>样式覆盖…...
重塑业务生态,Vatee万腾平台:引领行业变革的新引擎
在数字经济浪潮汹涌的今天,传统行业的边界正被不断模糊与重塑,新兴技术如云计算、大数据、人工智能等正以前所未有的速度改变着商业世界的面貌。在这一背景下,Vatee万腾平台应运而生,以其独特的创新模式和强大的技术实力ÿ…...
标准术语和定义中的【架构】应该如何描述
一、参考国家标准和国际标准中对“架构”的描述 (1)GB/T 8566-2022 国家标准 架构的术语描述:(系统)在其环境中的一些基本概念或性质,体现在其元素关系,以及设计与演进原则中。 (2)ISO/IEC/IEEE 42010 国际标准 架构的…...
华为鸿蒙Core Vision Kit 骨骼检测技术
鸿蒙Core Vision Kit 是华为鸿蒙系统中的一个图像处理框架,旨在提供各种计算机视觉功能,包括物体检测、人脸识别、文本识别等。骨骼检测是其中的一项功能,主要用于检测和识别人类身体的骨骼结构。 骨骼检测的关键点 骨骼点检测:通…...
Table API SQL系统(内置)函数System (Built-in) Function详解
目录 函数类型 引用函数 函数精确引用 函数模糊引用 函数解析顺序 精确的函数引用 模糊的函数引用 系统函数 标量函数(Scalar Functions) 比较函数(Comparison Functions) 逻辑函数(Logical Functions) 算术函数(Arithmetic Functions) 字符串函数(Strin…...
一键运行RocketMQ5.3和Dashboard
一键运行RocketMQ5.3和Dashboard 目录 一键运行RocketMQ5.3和Dashboard通过Docker Compose 来一键启动运行的容器包括docker-compose.yml文件运行命令启动本地效果查看 参考信息 通过Docker Compose 来一键启动 运行的容器包括 NameServerBrokerProxyDashBoard docker-compo…...
HAL STM32 SG90舵机驱动控制
HAL STM32 SG90舵机驱动控制 🔖测试对象:STM32F103SG90舵机 🌼功能实现:通过串口指令,控制SG90舵机转动到指定角度。 ✨在实际硬件舵机驱动过程中,使用SG90普通舵机空载运转情况下,电流在180mA…...
【Kubernetes】k8s集群图形化管理工具之rancher
目录 一.Rancher概述 1.Rancher简介 2.Rancher与k8s的关系及区别 3.Rancher具有的优势 二.Rancher的安装部署 1.实验准备 2.安装 rancher 3.rancher的浏览器使用 一.Rancher概述 1.Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实…...
AI编程系列一1小时完成链家房价爬虫程序
背景 AI编程实在太火,写了很多年的Java,现在Python 和Go 简单好用,今天结合智谱清言快速完成一个程序爬虫程序,没有任何Python 编程经验,只需要会提问,熟悉简单HTML结构即可。未来一定是有业务能力者的福…...
【JavaEE初阶】文件内容的读写—数据流
目录 📕 引言 🌴 数据流的概念 🚩 数据流分类 🌳 字节流的读写 🚩 InputStream(从文件中读取字节内容) 🚩 OutputStream(向文件中写内容) 🎄 字符流的…...
Spring Boot项目中使用Sharding-JDBC实现读写分离
Sharding-JDBC是一个分布式数据库中间件,它不仅支持数据分片,还可以轻松实现数据库的读写分离。下面是如何在Spring Boot项目中集成Sharding-JDBC并实现读写分离的详细步骤: 目录 1. 引入依赖 2. 配置数据源 3. 配置Sharding-JDBC相关参数…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
