SDL系列(三)—— SDL2.0 扩展库:SDL_image与SDL_mixer

SDL_image

SDL 默认支持的,只能打开 BMP 格式的图片
然而我们常见的是 Png jpg 格式的图片,于是我们这节完成 SDL 借用 自带的三方库 ,来
完成加载渲染 png 等其他图片格式。
SDL_image 简介
使用 SDL_image ,您可以加载流行的图像格式,如 BMP PNM PPM / PGM / PBM ),
XPM LBM PCX GIF JPEG PNG TGA TIFF 格式。 这些被加载到你的 SDL_Surface 上, 并且正常地画在屏幕上。同时, 支持 Alpha 透明度,比如加载 PNG 图片。
SDL2.0 扩展库—— SDL_image 的添加
首先,安装前面的配置,有一个基本的 SDL2.0 开发工程,在这个基础上添加 SDL_image
展库。
下载地址: https://www.libsdl.org/projects/SDL_image/
. 还是在 windows 上,用 vs 编辑器,下载对应的开发包:
int main_show_png()
{bool quit = false;SDL_Event event;//SDL初始化,这里只显示图片,所以只初始化VIDEO系统,更多的支持查看官方文档SDL_Init(SDL_INIT_VIDEO);//为了显示png图片,额外使用了图片库,所以要单独初始化IMG_Init(IMG_INIT_JPG | IMG_INIT_PNG);//建立SDL窗口SDL_Window * window = SDL_CreateWindow("SDL2 Displaying Image",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);//渲染层SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);//如果只是显示一张bmp图片,使用sdl内置的功能即可//SDL_Surface * image = SDL_LoadBMP("only_support_BMP.bmp");//因为要显示png图片,所以使用了外部库,sdl_image库当前支持jpg/png/webp/tiff图片格式SDL_Surface * image = IMG_Load("Hello_world.jpg");//载入的图片生成SDL贴图材质SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, image);while (!quit){//主消息循环SDL_WaitEvent(&event);switch (event.type){	//用户从菜单要求退出程序case SDL_QUIT:quit = true;break;}//如果指定显示位置使用下面注释起来的两句//SDL_Rect dstrect = { 5, 5, 320, 240 };//SDL_RenderCopy(renderer, texture, NULL, &dstrect);//把贴图材质复制到渲染器SDL_RenderCopy(renderer, texture, NULL, NULL);//显示出来:刷新渲染器SDL_RenderPresent(renderer);}//典型的三明治结构,清理各项资源SDL_DestroyTexture(texture);SDL_FreeSurface(image);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);//退出image库IMG_Quit();//退出SDLSDL_Quit();return 0;
}

SDL_mixer

SDL 本身的音频的扩展是通过 SDL_Mixer 来扩展的。
文档来看 . 可以支持 Wav,MP3,OGG,FAC,MIDI 几种常用的音频的格式。
SDL_mixer 本身只提供 WAV 的解码播放功能 . 其余格式都是封装第三方库来实现的。
SDL_mixer 提供了三个测试程序 playwav ,playmus ,playmidi 来演示如何使用 SDL_mixer
进行播放
sdl2.0 使用 SDL_Mixer 播放音乐
        对于 SDL_2.0 中自带的播放 wav 格式音乐的功能我就不说了,本人用起来感觉特别麻
烦,操作好多,而 SDL_Mixer 库中加载播放 wav 只要三行代码,是的,你没有看错,就是三
行代码,我当时都有点不可思议,那么进入正题吧。

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

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

相关文章

自动驾驶技术:现状、挑战与前景

自动驾驶技术是当今汽车行业的热门话题,它的发展前景备受关注,同时也面临着诸多挑战和限制。在这篇文章中,我将探讨自动驾驶技术的现状、挑战,并展望其未来的发展前景。 现状: 自动驾驶技术已经取得了一定的进…

MBGP MPLS VPN

一、MPLS的不足与发展 1、在90年代初期,各个厂商的硬件设备性能不足时,MPLS能够很好的替代掉传统路由基于IP路由表多次查表转发数据的问题,但随着硬件性能的不断攀升,MPLS在转发性能上的优势几乎丧失掉; 2、但MPLS由…

[笔试训练](二十三)067:打怪068:字符串分类069:城市群数量

目录 067:打怪 068:字符串分类 069:城市群数量 067:打怪 题目链接:打怪 (nowcoder.com) 题目: 题解: 直接计算结果: 1.一只怪物能抗几次攻击 int m(H/a)(H%a0?0:1); 2.杀死一只怪物,玩家要抗几次攻击 int nm-1; *3.杀死一只…

Lc33---- 414. 第三大的数(java版)---排序(去重/复制到新数组)

1.题目描述 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出…

jmeter指南:JMeter 安装、配置和性能测试

使用 JMeter 进行性能测试 1. Java 版本要求 JMeter 要求与 Java 8 或更高版本兼容。为了确保安全性和性能,建议安装最新次要版本的主要 Java 版本。鉴于 JMeter 仅使用标准 Java API,如果由于 JRE 实现问题而无法运行 JMeter,请不要提交错…

【Python】记录第一次接 python 项目搭建环境的问题

python安装指定版本的包 pip install packageversion查看包版本 pip show <package_name>运行main函数报 coreapi 错误 AssertionError: coreapi must be installed for schema support. 错误解 pip install coreapi 修改 pip install 目录 有可能会没有&#xff0c…

VMware Workstation 安装CentOS Linux操作系统

1.我们已经下载好VMware 创建新的虚拟机 2.选择典型 3.安装程序光盘映像文件 4.配置用户名密码 5.命名虚拟机&#xff0c;并确定位置 6.如图所示设置 7.等待&#xff08;时间会有点久&#xff09; 8.输入密码登入账号

工单系统有哪些?

市面上的工单系统真的非常多&#xff0c;一个个列举肯定说不完&#xff0c;我大致给它们按照不同的依据&#xff0c;进行了一下分类&#xff1a; 1、按部署方式分类&#xff1a; 本地化部署工单系统&#xff1a;适用于对数据安全性要求较高的企业&#xff0c;需要企业在本地服…

uniapp小程序控制页面元素滚动指定距离

要实现页面元素滚动&#xff0c;最好还是使用 scroll-view 来实现&#xff0c;官方文档地址&#xff1a;scroll-view | uni-app官网 通过设置scroll事件来实现滚动监听&#xff0c;当滚动的元素的时候&#xff0c;就会触发这个事件&#xff0c;并且事件里面包含有滚动距离&…

Java基础之常见集合 api 详细示例代码

集合 1 . Collection接口 Collection接口是Java单列集合的根接口&#xff0c;它定义了各种具体单列集合的共性 &#xff0c; 其它大多数单列集合直接或间接继承该接口 定义 : public interface Collection<E> extends Iterable<E>{// Operations } 一般用得少…

Java 中能创建 volatile 数组吗?

在Java中&#xff0c;volatile关键字用于确保多线程环境下的变量可见性和有序性。然而&#xff0c;当你将volatile关键字应用于数组时&#xff0c;它仅仅保证了数组引用本身的可见性&#xff0c;而不是数组内部元素的可见性。 这意味着&#xff0c;如果你有一个volatile数组&a…

MySQL--增删改查案例演示

一&#xff1a;显示数据库及模糊查询&#xff08;like&#xff09; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | db_user | | information_schema | | mysql | | perfor…

PCIE协议-2-事务层规范-Virtual Channel (VC) Mechanism

2.5 虚拟通道&#xff08;VC&#xff09;机制 虚拟通道&#xff08;VC&#xff09;机制提供了对可以在整个结构中传输使用TC&#xff08;流量类别&#xff09;标签区分的流量的支持。VC的基础是独立的结构资源&#xff08;队列/缓冲区及其相关的控制逻辑&#xff09;。这些资源…

【Android踩坑】重写onClick方法时,显示Method does not override method from its supperclass

问题 重写onClick方法时&#xff0c;显示Method does not override method from its supperclass 解决 在类上加implements View.OnClickListener

【Python】通过字典映射调用方法

通过字典映射决定调用哪个py脚本中的方法 from proxy_anchor.dataset import CUBirds, SOP, Cars from proxy_anchor.dataset.Inshop import Inshop_Datasetds_list {"CUB": CUBirds, "SOP": SOP, "Cars": Cars, "Inshop": Inshop_D…

用于WB的抗体一定能用来做IHC吗?

首先&#xff0c;我们来了解下抗原表位。由于蛋白可以折叠成三维结构。 所以抗原表位可以分成两种类型&#xff1a; 线性表位 一般指的是由序列上相连接的一些氨基酸残基通过共价键形成的结构&#xff0c;也称为顺序表位&#xff0c;是蛋白质的一级结构&#xff0c;比较稳定&…

【重生之我在学Android】WorkManager (章一)

相关文章 【重生之我在学Android原生】ContentProvider(Java) 【重生之我在学Android原生】Media3 【重生之我在学Android】WorkManager &#xff08;章一&#xff09; 前言 官方文档 官方推荐 - 前台服务、后台服务都可以使用WorkManger来实现 案例 语言&#xff1a;JA…

Vue3详细讲解

Vue 3 介绍 文章目录 Vue 3 介绍为什么要学习 vue 3Vue3 动机 和 新特性 Vite 的使用vite介绍为什么选 Vite &#xff1f;Vite 的基本使用Vue3.0项目介绍vscode插件说明 组合式APIcomposition API vs options API体验 composition APIsetup 函数reactive 函数ref 函数script se…

webpack优化构建体积示例-并行压缩:

uglifyjs-webpack-plugin和terser-webpack-plugin都可以开启多进程并进行压缩来减小构件体积大小。 当在 Webpack 配置中启用 minimize: true 时&#xff0c;构建时间通常会增加&#xff0c;这是因为 Webpack 会在构建过程中添加一个额外的步骤&#xff1a;代码压缩。代码压缩是…

Python实现将日志写入到数据表中

文章目录 1. 设计数据库表结构2. 对日志的处理1. 日志数据结构化2. 使用日志库3. 日志异步写入4. 错误处理和重试机制5. 合理的索引和表设计6. 清理和维护策略示例&#xff1a;使用logging库和MySQL处理器 3. Python代码实现注意事项 4 .用pymysql实现安装 pymysqlPython 脚本实…