当前位置: 首页 > news >正文

九、sdl显示bmp图片

前言

SDL中内置加载BMP的API,使用起来会更加简单,便于初学者学习使用SDL

如果需要加载JPG、PNG等其他格式的图片,可以使用第三方库:SDL_image


测试环境:

  • ffmpeg的4.3.2自行编译版本
  • windows环境
  • qt5.12
  • sdl2.0.22(mingw编译器)

完整代码:

SdlShowBmpThread.h

#ifndef SDLSHOWBMPTHREAD_H
#define SDLSHOWBMPTHREAD_H#include <QObject>
#include <QThread>class SdlShowBmpThread : public QThread
{Q_OBJECT
public:explicit SdlShowBmpThread(QObject *parent = nullptr);~SdlShowBmpThread();signals:// QThread interface
protected:virtual void run() override;
};#endif // SDLSHOWBMPTHREAD_H

SdlShowBmpThread.cpp

#include "sdlshowbmpthread.h"#include <QDebug>
#include <SDL2/SDL.h>#define END(judge, func) \if (judge) { \qDebug() << #func << "error" << SDL_GetError(); \goto end; \}SdlShowBmpThread::SdlShowBmpThread(QObject *parent) : QThread(parent)
{// 当监听到线程结束时(finished),就调用deleteLater回收内存connect(this,&SdlShowBmpThread::finished,this,[=](){this->deleteLater();qDebug()<<"SdlPlayWavThread线程结束";});
}SdlShowBmpThread::~SdlShowBmpThread()
{// 断开所有的连接disconnect();// 内存回收之前,正常结束线程requestInterruption();// 安全退出quit();wait();qDebug() << this << "析构(内存被回收)";
}void SdlShowBmpThread::run()
{// 像素数据SDL_Surface *surface = nullptr;// 窗口SDL_Window *window = nullptr;// 渲染上下文SDL_Renderer *renderer = nullptr;// 纹理(直接跟特定驱动程序相关的像素数据)SDL_Texture *texture = nullptr;// 矩形框SDL_Rect srcRect = {0, 0, 1928, 1048};  //源图片从0,0坐标截取1928*1048尺寸大小的图片SDL_Rect dstRect = {0, 0, 1928, 1048};  //目标图片在0,0左边显示1928*1048大小的图片SDL_Rect rect;// 初始化子系统END(SDL_Init(SDL_INIT_VIDEO), SDL_Init);// 加载BMPsurface = SDL_LoadBMP("E:/media/picture-test.bmp");END(!surface, SDL_LoadBMP);// 创建窗口window = SDL_CreateWindow(// 标题"SDL显示BMP图片",// xSDL_WINDOWPOS_UNDEFINED,// ySDL_WINDOWPOS_UNDEFINED,// wsurface->w,// hsurface->h,SDL_WINDOW_SHOWN);END(!window, SDL_CreateWindow);// 创建渲染上下文renderer = SDL_CreateRenderer(window, -1,SDL_RENDERER_ACCELERATED |SDL_RENDERER_PRESENTVSYNC);if (!renderer) {renderer = SDL_CreateRenderer(window, -1, 0);END(!renderer, SDL_CreateRenderer);}// 创建纹理texture = SDL_CreateTextureFromSurface(renderer, surface);END(!texture, SDL_CreateTextureFromSurface);// 画一个红色的矩形框END(SDL_SetRenderDrawColor(renderer,255, 0, 0, SDL_ALPHA_OPAQUE),SDL_SetRenderDrawColor);rect = {0, 0, 50, 50};END(SDL_RenderFillRect(renderer, &rect),SDL_RenderFillRect);// 设置绘制颜色(画笔颜色)END(SDL_SetRenderDrawColor(renderer,255, 255, 0, SDL_ALPHA_OPAQUE),SDL_SetRenderDrawColor);// 用绘制颜色(画笔颜色)清除渲染目标END(SDL_RenderClear(renderer),SDL_RenderClear);// 拷贝纹理数据到渲染目标(默认是window)END(SDL_RenderCopy(renderer, texture, &srcRect, &dstRect),SDL_RenderCopy);// 更新所有的渲染操作到屏幕上SDL_RenderPresent(renderer);SDL_Delay(2000);end:SDL_FreeSurface(surface);SDL_DestroyTexture(texture);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);SDL_Quit();
}

线程调用:

void MainWindow::on_pushButton_sdl_show_bmp_clicked()
{m_pSdlShowBmpThread=new SdlShowBmpThread(this);m_pSdlShowBmpThread->start();
}

注意:.h文件中提前声明了以下全局变量

	SdlShowBmpThread *m_pSdlShowBmpThread=nullptr;

注意:本文为个人记录,新手照搬可能会出现各种问题,请谨慎使用


码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

相关文章:

九、sdl显示bmp图片

前言 SDL中内置加载BMP的API&#xff0c;使用起来会更加简单&#xff0c;便于初学者学习使用SDL 如果需要加载JPG、PNG等其他格式的图片&#xff0c;可以使用第三方库&#xff1a;SDL_image 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12sdl2.0.22&…...

ROS设置DHCP option121

配置时&#xff0c;了解格式很关键&#xff0c;16进制填写格式如下&#xff1a; 将要访问的IPV&#xff14;地址&#xff1a;192.168.100.0/24 192.168.30.254 转换为&#xff1a;掩码 目标网段 网关 0x18c0a864c0a81efe&#xff0c;0不用填写 ROS配置如下图&#xff1a; 抓…...

④【Set】Redis常用数据类型: Set [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Redis Set ④Redis Set 操作命令汇总1. sadd …...

助力企业前行——ScalaSpark最佳实践课程

时间飞逝&#xff0c;转眼间我们的Scala&Spark培训课程已经圆满结束&#xff01;在这段精彩的学习旅程中&#xff0c;你们展现了坚韧、决心和追求卓越的品质。 scala(Scalable Language)是一种多范式的编程语言&#xff0c;其设计的初衷是要集成面向对象编程和函数式编程的…...

pikachu靶场Table pikachu.member doesn’t exist:解决

背景&#xff1a; 第一次搭建pikachu靶场&#xff0c;搭建好后访问index.php后&#xff0c;尝试练习&#xff0c;发现界面显示Table pikachu.member doesn t exist&#xff0c;后来找了很多教程&#xff0c;没有解决&#xff0c;后来发现是自己没有进行初始化&#xff0c;给大家…...

Github Copilot AI编码完成工具

目录 一、GitHub Copilot 1、简介 2、工作原理 3、功能 二、GitHub Copilot X 1、什么是 GitHub Copilot X 2、GitHub Copilot X 的功能 三、支持、使用 1、支持 2、使用 四、实际研究、验证(代码方向) 1、代码生成 2、代码提示 3、生成测试用例 4、代码解释 5…...

android 9 adb安装过程学习(二)

一、PackageInstalllerService流程分析 下面来分析下 PackageInstallerService 中的逻辑&#xff0c;我们先来看看 PackageInstallerService 的创建&#xff0c;当然&#xff0c;这部分的逻辑是在开机的时候&#xff0c;这里我们再回顾下&#xff1a; 位置&#xff1a;./frame…...

Java面试-框架篇-Mybatis

Java面试-框架篇-Mybatis MyBatis执行流程延迟加载使用及原理一, 二级缓存来源 MyBatis执行流程 读取MyBatis配置文件: mybatis-config.xml加载运行环境和映射文件构造会话工厂SqlSessionFactory会话工厂创建SqlSession对象(包含了执行SQL语句的所有方法)操作数据库的接口, Ex…...

java基础-集合

1、集合 在java中&#xff0c;集合&#xff08;Collection&#xff09;指的是一组数据容器&#xff0c;它可以存储多个对象&#xff0c;并且允许用户通过一些方法来访问与操作这些对象。j 集合的实现原理都基于数据结构和算法&#xff0c;如下&#xff1a; 数据结构&#xff1…...

【C++11】auto与decltype关键字使用详解

系列文章目录 C11新特性使用详解-持续更新 文章目录 系列文章目录前言一、auto关键字1.根据变量的初始化表达式来推导变量的类型2.const与引用 二、decltype关键字1.推断表达式的类型2.const与引用 三、总结 前言 auto和decltype是C11引入的俩个重要的新关键字&#xff0c;用…...

Servlet实现一个简单的表白墙网站

文章目录 前言效果展示事前准备HTML、CSS、JavaScript分别负责哪些HTML和CSS构架出页面的基本结构和样式JavaScript 实现行为和交互实现服务器端的业务代码整理pom.xmlweb.xmlmessageWall.htmlMessageServlet.java 前言 前面我们学习了 Java 中知名的 HTTP 服务器 tomcat 的安…...

mysql 集群恢复

准备使用集群的时候发现集群起不来&#xff0c; 发现抱错集群各个节点都是readonly 状态&#xff0c;找了很多资料&#xff0c;由于集群处于不一致的情况需要防止不同的节点数据写入脏数据 取消节点readonly 方法如下&#xff1a; MySQL 取消 super read only 直接关闭read…...

基于STM32的色彩识别与分类算法优化

基于STM32的色彩识别与分类算法优化是一项与图像处理和机器学习相关的研究任务&#xff0c;旨在实现高效的色彩识别和分类算法在STM32微控制器上的运行。本文将介绍基于STM32的色彩识别与分类算法优化的原理和实现步骤&#xff0c;并提供相应的代码示例。 1. 色彩识别与分类概…...

阿里云发送短信

官方代码如下&#xff1a; // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…...

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…...

hadoop在本地创建文件,然后将文件拷贝/上传到HDFS

1.要$cd {对应目录}进入到对应目录&#xff0c;一般为 cd /usr/local/hadoop/ 2.创建文件&#xff0c;$sudo gedit {文件名}&#xff0c;例 sudo gedit test.txt 然后在弹出的txt文件输入内容&#xff0c;点击右上角的保存之后&#xff0c;关闭即可。 3.拷贝本地文件到HDF…...

NFC:应用场景广泛的短距离通信技术

NFC&#xff1a;应用场景广泛的短距离通信技术 一、NFC 技术介绍1.1 NFC 技术应用场景1.2 NFC 技术优点1.3 NFC 工作原理 二、NFC 开发2.1 NFC 应用开发流程2.2 NFC 读取和写入2.3 NFC 读写功能示例 三、总结 一、NFC 技术介绍 NFC &#xff08;Near-field communication&…...

CentOS使用docker安装OpenGauss数据库

1.搜索OpenGauss docker search opengauss 2.选择其中一个源拉取 docker pull docker.io/enmotech/opengauss 3.运行OpenGauss docker run --name opengauss --privilegedtrue --restartalways -d -e GS_USERNAMEpostgres -e GS_PASSWORDmyGauss2023 -p 5432:5432 docker.…...

原理Redis-QuickList

QuickList **问题1&#xff1a;**ZipList虽然节省内存&#xff0c;但申请内存必须是连续空间&#xff0c;如果内存占用较多&#xff0c;申请内存效率很低。怎么办&#xff1f; 为了缓解这个问题&#xff0c;我们必须限制ZipList的长度和entry大小。 **问题2&#xff1a;**但是…...

js双击修改元素内容并提交到后端封装实现

前面发过一个版本了&#xff0c;后来又追加了些功能。重新发一版。新版支持select和radio。 效果图&#xff1a; 右上角带有绿标的&#xff0c;是可以修改的单元格。如果不喜欢显示绿标&#xff0c;可以传递参数时指定不显示&#xff0c;如果想改为其它颜色&#xff0c;也可以…...

通过 Python 示例代码快速实现与大模型的多轮对话交互

通过 Python 示例代码快速实现与大模型的多轮对话交互 1. 环境准备与依赖安装 在开始之前&#xff0c;请确保您的 Python 环境版本为 3.7 或更高。我们将使用 openai 这个官方 Python 包来与 Taotoken 的 API 进行交互。通过 pip 安装所需依赖&#xff1a; pip install open…...

为什么你的Minecraft整合包分享总是不顺利?5个技巧彻底解决

为什么你的Minecraft整合包分享总是不顺利&#xff1f;5个技巧彻底解决 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher&#xff08;PCL&#xff09;。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL Plain Craft Launcher 2&#xff08;简称PCL2&…...

如何选择最适合您企业的专题片拍摄团队?

在当今这个信息爆炸的时代&#xff0c;企业专题片已成为品牌宣传和形象塑造的重要手段。然而&#xff0c;如何从众多的拍摄团队中挑选出最适合自己企业的合作伙伴&#xff0c;却是一个需要认真考虑的问题。本文将通过分析行业现状、提供实用指南&#xff0c;并结合具体案例&…...

智慧树刷课插件完整指南:5分钟实现视频自动化播放的终极方案

智慧树刷课插件完整指南&#xff1a;5分钟实现视频自动化播放的终极方案 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台繁琐的视频学习流程而烦恼吗&…...

大语言模型幻觉检测:NTK理论与工程实践

1. 项目背景与核心挑战大语言模型&#xff08;LLM&#xff09;的"幻觉"问题已经成为当前AI领域最棘手的挑战之一。所谓幻觉&#xff0c;指的是模型生成看似合理但实际上与事实不符的内容。这种现象在医疗诊断、法律咨询、金融分析等高风险场景中可能造成严重后果。传…...

Hitboxer终极指南:彻底解决游戏键盘冲突的专业工具

Hitboxer终极指南&#xff1a;彻底解决游戏键盘冲突的专业工具 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否曾在激烈的游戏对战中因为键盘输入冲突而错失关键操作&#xff1f;当同时按下相反方向键时&…...

告别‘找不到元素’:用Poco定位移动端UI的10个实战技巧(附避坑清单)

告别‘找不到元素’&#xff1a;用Poco定位移动端UI的10个实战技巧&#xff08;附避坑清单&#xff09; 在移动端自动化测试中&#xff0c;元素定位是最基础也最令人头疼的问题。无论是电商App的动态商品列表&#xff0c;还是社交软件的消息气泡&#xff0c;甚至是游戏中的虚拟…...

Python 爬虫分布式架构基础与多机协同采集方案

前言随着爬取目标站点规模扩大、反爬策略升级、数据量级指数级增长&#xff0c;单机单线程、单机多线程爬虫会天然遇到三大瓶颈&#xff1a;IP 限制、采集效率不足、单机性能上限。普通并发爬虫受限于单机 CPU、带宽、IP 池&#xff0c;面对海量站点与高频采集需求时&#xff0…...

如何在 openclaw 中快速配置 taotoken 聚合大模型 api 端点

如何在 OpenClaw 中快速配置 Taotoken 聚合大模型 API 端点 1. 准备工作 在开始配置之前&#xff0c;请确保已安装 OpenClaw CLI 工具。可以通过以下命令检查是否已安装&#xff1a; openclaw --version如果未安装&#xff0c;请参考 OpenClaw 官方文档进行安装。同时&#…...

【职场建议】转行AI产品经理,年薪80W:真的值得考虑!

近期有很多社招的小伙伴都在看转行的机会&#xff0c;同时马上要到了秋招的季节&#xff0c;校招生们都在积极选择第一份工作。所有人想要进入一个有前景、高薪高潜力的黄金赛道。 2024年如果大家看新机会&#xff0c;重点给大家推荐AI领域的岗位。先看一组数据&#xff1a; …...