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 编辑器,下载对应的开发包:

cpp 复制代码
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();
	//退出SDL
	SDL_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 只要三行代码,是的,你没有看错,就是三
行代码,我当时都有点不可思议,那么进入正题吧。

相关推荐
Hello_Embed7 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中7 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Magnetic_h8 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
研梦非凡9 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
清风66666610 小时前
基于STM32的APP遥控视频水泵小车设计
stm32·单片机·mongodb·毕业设计·音视频·课程设计
limengshi13839210 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
知识分享小能手10 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
Cary丿Xin11 小时前
Luma 视频生成 API 对接说明
音视频
周周记笔记11 小时前
学习笔记:第一个Python程序
笔记·学习
优雅鹅11 小时前
ARM、AArch64、amd64、x86_64、x86有什么区别?
arm开发·学习