SDL2 简明教程:用 SDL_IMAGE 库导入图片
Posted 芥末的无奈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDL2 简明教程:用 SDL_IMAGE 库导入图片相关的知识,希望对你有一定的参考价值。
系列文章目录
SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境
文章目录
集成 SDL_IMAGE
在 SDL2 简明教程(三):显示图片
中,我们使用 SDL2 自带的函数 SDL_LoadBMP()
导入 bmp 图片。但这个函数只能导入 bmp 格式,SDL2 也没有提供其他函数来导入其他格式的图片。幸运的是,有个叫 sdl_image 的库可以提供此类功能。这篇文章将向你展示如何使用 sdl_image 导入其他格式的图片。
在我们的工程中集成 sdl_image 非常简单(感谢 conan 带来的便利),你只需在 conanfile.txt 中添加对 sdl_image 的依赖即可:
[requires]
sdl/2.0.20
sdl_image/2.0.5
[generators]
cmake
你可以在 sdl_image - conan center 找到更多关于 sdl_image 包的信息。接着,请像 SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境 中一样构建我们的代码即可。
使用 SDL_IMAGE 导入图片
sdl_image 使用非常简单,首先引入头文件
#include <SDL_image.h>
接着,调用 IMG_Init()
初始化 sdl_image
IMG_Init(IMG_INIT_JPG);
目前 sdl_image 支持四种格式,分别是:
- IMG_INIT_JPG
- IMG_INIT_PNG
- IMG_INIT_TIF
- IMG_INIT_WEBP
你可以同时初始化多种格式,例如
IMG_Init(IMG_INIT_JPG | IMG_INIT_PNG);
记得,在退出前调用 IMG_Quit()
来释放资源
IMG_Quit();
现在,使用 IMG_Load()
替换 SDL_LoadBMP()
来导入其他格式图片
SDL_Surface * image = IMG_Load("PICT3159.JPG");
最后贴上所有代码:
#if defined(__cplusplus)
extern "C"
#endif
#include <SDL.h>
#include <SDL_image.h>
#if defined(__cplusplus)
;
#endif
#include <iostream>
using namespace std;
int main()
bool quit = false;
SDL_Event event;
SDL_Init(SDL_INIT_VIDEO);
IMG_Init(IMG_INIT_JPG);
SDL_Window *window = SDL_CreateWindow("My SDL Empty window",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
640, 480, 0);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
SDL_Surface *image = IMG_Load("sdl_image.jpeg");
if (image == nullptr)
cerr << "SDL_LoadBMP failed\\n";
return -1;
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image);
for (; !quit;)
SDL_WaitEvent(&event);
switch (event.type)
case SDL_QUIT:
quit = true;
break;
SDL_RenderCopy(renderer, texture, nullptr, nullptr);
SDL_RenderPresent(renderer);
SDL_DestroyTexture(texture);
SDL_FreeSurface(image);
SDL_DestroyRenderer(renderer);
IMG_Quit();
SDL_Quit();
return 0;
总结
非常棒!sdl_image 可以支持多种格式图片,需要用 IMG_Load
代替 SDL_LoadBMP()
即可。你需要初始化和清理 sdl_image,这些都非常简单。
本文所有代码可以在 sdl2_tutorial 找到。
以上是关于SDL2 简明教程:用 SDL_IMAGE 库导入图片的主要内容,如果未能解决你的问题,请参考以下文章