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 支持四种格式,分别是:

扫描二维码关注公众号,回复: 14878471 查看本文章
  • 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 找到。

猜你喜欢

转载自blog.csdn.net/weiwei9363/article/details/125919266
今日推荐