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

SDL2 加载图片

1.简介

在SDL中,本身只支持加载BMP格式的图片SDL_LoadBMP,如果想要加载别的格式图片,需要编译SDL_image库。

SDL_image库中IMG_Load和都是IMG_LoadTexture用于加载图片的函数,但是它们的使用方式和返回值有所不同。

IMG_Load和IMG_LoadTexture区别:

  • IMG_Load返回一个指向加载后的 SDL_Surface 结构的指针,IMG_LoadTexture返回的是SDL_Texture指针。
  • IMG_LoadTexture加载后的图像数据直接存储在GPU显存中,因此能够更快地在屏幕上渲染。这对于实时渲染效果更好的应用程序(如游戏)非常有用。
  • IMG_Load函数返回的是一个SDL表面对象指针,需要使用SDL_FreeSurface函数释放内存,IMG_LoadTexture函数返回的是一个SDL纹理对象指针,需要使用函数SDL_DestroyTexture释放内存。

总之,如果您只需要加载图片并将其作为普通表面使用,可以选择 IMG_Load。但如果您需要在游戏中实时渲染图片,例如滚动、缩放或切割,那么使用 IMG_LoadTexture 会更方便。

2.SDL_image编译

下载源码:GitHub - libsdl-org/SDL_image at SDL2

首先编译SDL库:SDL2 简单介绍以及Windows开发环境搭建-CSDN博客

使用CMake,指定编译好的SDL2的库路径和include路径。

然后,打开VS直接编译就行了,编译好生成库如下图所示。

3.配置环境

先拷贝SDL_image的头文件和库文件到目的目录下,如下图所示:

 

VS的配置请看SDL2 简单介绍以及Windows开发环境搭建-CSDN博客

目录4.配置,跟配置SDL库一样的配置。

4.示例

IMG_Load代码示例:

#include <iostream>
#include <SDL.h>
#include <SDL_image.h>#undef main
int main()
{SDL_Window *window = SDL_CreateWindow("demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);// 得到 SDL_Window 的 SDL_SurfaceSDL_Surface *pWindowSurface = SDL_GetWindowSurface(window);//向渲染区域涂成白色SDL_FillRect(pWindowSurface, NULL,SDL_MapRGB(pWindowSurface->format, 0xFF, 0xFF, 0xFF));// 根据图片创建一个 SDL_SurfaceSDL_Surface *pImageSurface = IMG_Load("D:/2.png");bool bQuit = false;SDL_Event windowEvent;while (!bQuit) {while (SDL_PollEvent(&windowEvent)){switch (windowEvent.type){case SDL_QUIT:bQuit = true;break;default:break;}}// 将 pImageSurface 的内容传输到 上SDL_BlitSurface(pImageSurface, NULL, pWindowSurface, NULL);//SDL_BlitScaled(pImageSurface, NULL, pWindowSurface, NULL);// 上屏操作,将 Surface 内容显示到屏幕上SDL_UpdateWindowSurface(window);}SDL_FreeSurface(pImageSurface);SDL_DestroyWindow(window);return 0;
}

如果想要图片自适应窗口,请使用SDL_BlitScaled。

IMG_LoadTexture代码示例:

#include <iostream>
#include <SDL.h>
#include <SDL_image.h>#undef main
int main()
{SDL_Window *window = SDL_CreateWindow("demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);SDL_Texture* texture = IMG_LoadTexture(renderer, "D:/2.png");if (texture == NULL) {SDL_Log("Failed to load image: %s", SDL_GetError());return 1;}SDL_RenderClear(renderer);SDL_RenderCopy(renderer, texture, NULL, NULL);SDL_RenderPresent(renderer);SDL_Delay(3000);SDL_DestroyTexture(texture);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);return 0;
}

相关文章:

SDL2 加载图片

1.简介 在SDL中&#xff0c;本身只支持加载BMP格式的图片SDL_LoadBMP&#xff0c;如果想要加载别的格式图片&#xff0c;需要编译SDL_image库。 SDL_image库中IMG_Load和都是IMG_LoadTexture用于加载图片的函数&#xff0c;但是它们的使用方式和返回值有所不同。 IMG_Load和…...

监控和数据采集软件架构和详细设计

介绍 监控和数据采集软件通过提供实时监控、数据收集和分析功能&#xff0c;在各个行业中发挥着至关重要的作用。这些软件应用程序可帮助企业收集有价值的见解、优化流程并做出明智的决策。在本文中&#xff0c;我们将探讨监测和数据采集软件的软件架构、编程技术和详细设计规范…...

链动2+1模式系统开发之区域代理深度解析

区域代理的保护机制&#xff1a;在链动商城系统里设定的代理有唯一性&#xff0c;每个省只有一个省代&#xff0c;每个市只有一个市代&#xff0c;每个区县只有一个区县代。这样也是保护每个代理的收益权益。 区域代理包含的权益类别&#xff1a;购物奖励折扣&#xff1b;区域实…...

Amazon Bedrock | 大语言模型CLAUDE 2体验

这场生成式AI与大语言模型的饥饿游戏&#xff0c;亚马逊云科技也参与了进来。2023年&#xff0c;亚马逊云科技正式发布了 Amazon Bedrock&#xff0c;是客户使用基础模型构建和扩展生成式AI应用程序的最简单方法&#xff0c;为所有开发者降低使用门槛。在 Bedrock 上&#xff0…...

通讯协议学习之路(实践部分):IIC开发实践

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 本文…...

『亚马逊云科技产品测评』活动征文|搭建带有“弱”图像处理功能的流媒体服务器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 本文基于以下软硬件工具&#xff1a; aws ec2 frp-0.52.3 mediamtx-1.3…...

正交矩阵的定义

对于n阶矩阵A&#xff0c;如果&#xff0c;其中为单位矩阵&#xff0c;为A的转置矩阵&#xff0c;那么就称A为正交矩阵。 对于正交矩阵&#xff0c; 对于正交矩阵&#xff0c;其列向量都是单位向量&#xff0c;行向量都是单位向量...

K8S集群etcd 某个节点数据不一致如何修复 —— 筑梦之路

背景说明 二进制方式安装的k8s集群&#xff0c;etcd集群有3个节点&#xff0c;某天有一台机器hang住了&#xff0c;无法远程ssh登陆&#xff0c;于是被管理员直接重启了&#xff0c;重启后发现k8s集群删除一个deployment应用&#xff0c;多次刷新一会有&#xff0c;一会没有&am…...

selenium/webdriver运行原理与机制

最近在看一些底层的东西。driver翻译过来是驱动&#xff0c;司机的意思。如果将webdriver比做成司机&#xff0c;竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色&#xff1a; 乘客&#xff1a;他/她告诉出租车司机去哪里&a…...

论文阅读[121]使用CAE+XGBoost从荧光光谱中检测和识别饮用水中的有机污染物

【论文基本信息】 标题&#xff1a;Detection and Identification of Organic Pollutants in Drinking Water from Fluorescence Spectra Based on Deep Learning Using Convolutional Autoencoder 标题译名&#xff1a;基于使用卷积自动编码器的深度学习&#xff0c;从荧光光谱…...

Juniper SRX PPPoE配置

直接上配置脚本 6号口接运营商进行拨号 ---------- set interfaces ge-0/0/6 unit 0 encapsulation ppp-over-ether set interfaces ge-0/0/6 description "Connect_to_Modem" set interfaces pp0 unit 0 pppoe-options underlying-interface ge-0/0/6.0 set inte…...

虚拟仪器软件结构VISA

1、什么是VISA VISA是虚拟仪器软件结构(Virtual Instrument Software Architectuere)的简称&#xff0c;是由VXI plug & play系统联盟所统一制定的I/O接口软件标准及其相关规范的总称。一般称这个I/O函数库为VISA库&#xff08;用于仪器编程的标准I/O函数库&#xff09;。…...

/etc/init.d/functions: Syntax error: “(“ unexpected (expecting “done“)

一.问题描述&#xff1a; ubuntu系统安装服务时报错&#xff1a; 二.问题解析&#xff1a; Ubuntu安装时默认使用dash&#xff0c;shell脚本命令失败&#xff0c;需要安装bash来运行&#xff0c;长期解决该问题就是重新配置dash 三:问题解决&#xff1a; sudo dpkg-reconfi…...

Google/微端/Amazon/IBM四个厂家在分布式里面提供的服务总结

1.背景 最近在复习分布式的课程&#xff0c;发现总有四家公司——Google/微端/Amazon/IBM绕不过去&#xff0c;而他们又开发了许许多多的服务和架构&#xff0c;需要去记忆&#xff0c;于是乎就整理了一下他们提供的服务 2.Google提供的服务 &#xff08;1&#xff09;GFS(Go…...

计网:第一章 概述

目录 1.1计算机网络在信息时代作用 1.2因特网概述 1.3三种交换方式 1.4计算机网络的定义和分类 1.5计算机网络的性能指标 1.6计算机网络的体系结构 基于湖科大教书匠b站计算机网络教学视频以及本校课程老师ppt 整合出的计算机网络学习笔记 根据文章目录&#xff0c;具体内…...

RT-DETR算法优化改进:新颖的多尺度卷积注意力(MSCA),即插即用,助力小目标检测 | NeurIPS2022

💡💡💡本文独家改进: 多尺度卷积注意力(MSCA),有效地提取上下文信息,新颖度高,创新十足。 1)代替RepC3进行使用; 2)MSCAAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/category_12497375.ht…...

基于遗传算法改进的GRNN多输入多输出回归预测,基于多目标遗传算法+GRNN的帕累托前沿求解,基于遗传工具箱调用GRNN模型的多目标求解

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 展望 完整代码下载链接:grnn多输入多输出训练测试,遗传算法改进grnn神经网络,NSGA-2多目标遗传算法,多目标遗传算法和grnn结合优化资源-CSDN文库 https://download.csdn.net/downloa…...

vue2按需导入Element(vite打包)

1.安装element 说明&#xff1a;-S是生产依赖。 npm install element-ui2 -S 2.安装babel-plugin-component 说明&#xff1a;-D是开发模式使用。 npm install babel-plugin-component -D 3. vite.config.js 说明&#xff1a;借助 babel-plugin-component &#xff0c;我们可…...

力扣117双周赛

第 117 场双周赛 给小朋友们分糖果 I 同T2 给小朋友们分糖果 II 数学 class Solution { public:long long distributeCandies(int n, int limit) {long long ans 0;for (int i 0; i < min(n, limit); i) {if (n - i < limit) {ans n - i 1;} else if (n - i <…...

SPI简介及FPGA通用MOSI模块实现

简介 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外围设备接口&#xff09;通讯协议&#xff0c;是Motorola公司提出的一种同步串行接口技术。是一种高速、全双工、同步通信总线。在芯片中只占用四根管脚用来控制及数据传输。 优缺点&#xff1a; SPI通讯协…...

OpenClaw自动化创作:Qwen2.5-VL-7B实现图文内容批量生成

OpenClaw自动化创作&#xff1a;Qwen2.5-VL-7B实现图文内容批量生成 1. 为什么需要自动化内容生产线 作为一个自媒体运营者&#xff0c;我每天需要处理大量的内容创作任务&#xff1a;从选题策划、文案撰写、配图设计到排版发布&#xff0c;整个过程耗时耗力。最让我头疼的是…...

解决Tailwind Next.js博客构建9大痛点:从开发到部署全流程指南

解决Tailwind Next.js博客构建9大痛点&#xff1a;从开发到部署全流程指南 【免费下载链接】tailwind-nextjs-starter-blog This is a Next.js, Tailwind CSS blogging starter template. Comes out of the box configured with the latest technologies to make technical wri…...

Windows开发者的容器化进阶:深度配置WSL2的.wslconfig与wsl.conf,榨干你的Docker替代方案性能

Windows开发者的容器化进阶&#xff1a;深度配置WSL2的.wslconfig与wsl.conf&#xff0c;榨干你的Docker替代方案性能 当你在Windows上使用WSL2运行容器时&#xff0c;是否遇到过内存占用飙升、磁盘空间告急或是网络配置复杂的困扰&#xff1f;作为已经跨过WSL2基础门槛的中高…...

CSS如何制作透明度渐变的蒙版_使用linear-gradient从黑色过渡到透明

linear-gradient做透明蒙版时背景没变暗&#xff0c;是因为未使用带alpha通道的颜色&#xff08;如rgba或带透明度的十六进制&#xff09;&#xff0c;而默认颜色如black或#000无透明度&#xff0c;导致渐变失效&#xff1b;必须用rgba(0,0,0,0.8)到rgba(0,0,0,0)等显式透明色&…...

Vue微商城实战:从零搭建高效开发环境与核心配置

1. 环境准备&#xff1a;搭建Vue开发基础 第一次用Vue做微商城项目时&#xff0c;我对着官方文档折腾了半天环境配置&#xff0c;结果运行时报错一片红。后来才发现是node版本和脚手架不兼容的问题。这里分享下我总结的零失败配置方案&#xff0c;帮你避开90%的初期坑点。 首先…...

AnalogTouch:面向车载系统的电阻屏触摸驱动库

1. AnalogTouch 库概述AnalogTouch 是面向 CARIAD 平台设计的模拟电阻式触摸屏&#xff08;Resistive Touch Panel, RTP&#xff09;驱动库&#xff0c;专为嵌入式车载显示系统优化。其核心目标并非通用触摸抽象层&#xff0c;而是深度适配 CARIAD 架构下 TFT/LCD 显示子系统的…...

马斯克最新对话:AI 毁灭人类的概率有 20%,但它将创造一个没有钱的“全民高收入”时代

“我宁愿看到结局&#xff0c;也不愿无聊老去。”编译 | 王启隆来源 | youtu.be/N5KCm_55xeQ出品丨AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;在此前结束的 2026 Abundance Summit 上&#xff0c;X奖基金会创始人彼得戴曼迪斯&#xff08;Peter Diamandis&…...

STM32duino驱动VL53L8CX多区ToF传感器实战指南

1. 项目概述X-NUCLEO-53L8A1 是意法半导体&#xff08;STMicroelectronics&#xff09;推出的面向 STM32 Nucleo 开发平台的扩展板&#xff0c;核心器件为 VL53L8CX —— 业界首款支持 88 多区域&#xff08;multizone&#xff09;测距的飞行时间&#xff08;Time-of-Flight, T…...

10块钱的PY32F00x单片机,用Keil和HAL库点灯保姆级教程(附资源包下载)

10元级PY32F00x单片机开发实战&#xff1a;从零点亮LED的完整指南 在电子爱好者和嵌入式开发者的世界里&#xff0c;性价比永远是绕不开的话题。当大多数教程还在讨论STM32时&#xff0c;一款国产的32位单片机正在悄然崛起——普冉PY32F00x系列&#xff0c;价格不到10元&#…...

JAVA无人自助TKV小程序源码实现方案及开源代码片段

无人自助TKV小程序需支持用户自助点歌、支付、设备控制等功能。采用uniapp框架实现跨平台兼容性&#xff08;微信小程序/H5/Android/iOS&#xff09;&#xff0c;后端使用Spring BootMySQL。关键技术包括&#xff1a;uniapp前端&#xff1a;Vue.js语法uView UI微信支付/支付宝支…...