SDL2 简明教程:用 SDL_IMAGE 库导入图片

Posted 芥末的无奈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDL2 简明教程:用 SDL_IMAGE 库导入图片相关的知识,希望对你有一定的参考价值。

系列文章目录

SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境

SDL2 简明教程(二):创建一个空的窗口

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 库导入图片的主要内容,如果未能解决你的问题,请参考以下文章

SDL2 简明教程:OpenGL 绘制

如何修复“SDL_image无法初始化!”?

如何在 cmake 中使用 SDL2 和 SDL_image

无法使用 IMG_Load() 加载图像

SDL2+OpenGL 混合图像产生动态效果

SDL2 简明教程:创建一个空的窗口