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,一经查实,立即删除!

相关文章

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

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

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

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

VMware Workstation 安装CentOS Linux操作系统

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

工单系统有哪些?

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

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

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

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

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

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

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

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

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

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

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

Vue3详细讲解

Vue 3 介绍 文章目录 Vue 3 介绍为什么要学习 vue 3Vue3 动机 和 新特性 Vite 的使用vite介绍为什么选 Vite ?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 时,构建时间通常会增加,这是因为 Webpack 会在构建过程中添加一个额外的步骤:代码压缩。代码压缩是…

Mysql数据库二进制日志导致磁盘满了处理过程

数据库的二进制日志是数据库管理系统(DBMS)用来记录所有对数据库进行修改的操作的记录。这种日志对于数据库的备份、恢复、复制和审计等操作至关重要。 以MySQL数据库为例,二进制日志(Binary Log)记录了所有更改数据的…

VBA直连SAP RFC 接口实例

引用依赖: VBA 调用 SAP API的RFC函数:RFC_READ_TABLE Sub A() 查询SAP表数据并输出到EXCEL,VBA中不区分大小写(保存后会自动把代码、变量转换大小写)Dim iData As Integer Dim nField As Integer Dim nData As Integer Dim Result As Boolean Dim vRow As Variant MsgBox…

机器人操作系统ROS2学习—控制小海龟运动

将Ubuntu系统和ROS2安装完成后,就可以进行调用小海龟运动了。 一、打开Ubuntu系统后,调用终端窗口。有3 种方法可以打开启动终端: 1、通过快捷键CtrAItT; 2、桌面左下角有个显示应用的菜单,点击后找到终端“Terminal”图标,打…

PCIe协议之-TLP Header详解(二)

✨前言: 在PCIe中,存在几种不同类型的请求,主要包括IO(Request)请求、存储器(Request)请求和配置(Request)请求。这些请求类型允许CPU与连接在PCIe总线上的设备进行通信和控制。 🌟1. IO(Request)请求 定义与作用: IO请求&…

Android ashmem 原理分析

源码基于:Andoird U Kernel-5.10 0. 简介 ashmem 称为匿名共享内存(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。它有两个特点: 能否辅助内存管理系统来有效地管理不再使用的内存块(pin / unpin); 通过Bind…

Android Don‘t Press With Parent Button按钮效果代码实现

1、需求效果 在做书签界面的时候,点击listview时候,删除按钮不要反选(图一);点击删除按钮删除按钮要反选(图二 ),效果图如下所示: 2、代码实现 2.1、java package com.eebbk.synstudy.bookmark;import android.co…

Echarts使用

介绍 ECharts 是一个强大的,基于 JavaScript 的开源数据可视化库,适用于创建多种类型的图表,满足广泛的业务需求。它由百度团队开发并维护,后来捐赠给了 Apache 软件基金会,并已在2021年从孵化项目毕业,成…

Java 插入数据到Elasticsearch中进行各种类型文档的内容检索

源码下载&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1D3yszkTzjwQz0vFRozQl2g?pwdz6kb 提取码&#xff1a;z6kb 实现思路 1.搭建一个新的springboot项目&#xff0c;不会的请看我这篇博客&#xff1a;springboot项目搭建 2.添加maven依赖 <dependency><…

计算机毕业设计源码 | 基于SpringBoot的线上教学系统 答疑辅导网站(附源码)

1&#xff0c;项目介绍 1.1 项目背景 网络问答平台经历了多年的发展&#xff0c;目前处于一个日益成熟的状态。最早的网络问答平台是知乎&#xff0c;知乎的创立者认为有许多信息在互联网上没有被记录和共享&#xff0c;于是他们决定创造一个平台&#xff0c;能够让更多人可以…