跳转到内容

SDL(简单直接媒体层) - 渲染其他图像格式

来自维基教科书,开放的书籍,开放的世界

渲染其他图像格式需要使用另一个 SDL 库:SDL_image。但是,渲染不同图像格式的过程与渲染BMP 图像非常相似。在本节中,我们将演示如何将 PNG 文件渲染到窗口上。

您可以在此GitLab 存储库中下载本节的源代码。所有源代码都存储在此组中。

导入 SDL_image

[编辑 | 编辑源代码]

我们将以以下方式在 wikibook.h 中导入 SDL_image

#ifdef _WIN32
#include <SDL/SDL.h> /* Windows-specific SDL2 library */
#include <SDL_image.h>
#else
#include <SDL2/SDL.h> /* macOS- and GNU/Linux-specific */
#include <SDL2/SDL_image.h>
#endif

初始化图像子系统

[编辑 | 编辑源代码]

在初始化 SDL 子系统之后,我们需要使用 IMG_Init 初始化图像子系统。给定参数 int flags,它在成功时返回 flags

我们想要渲染 PNG 文件,所以我们想要使用标志 IMG_INIT_PNG。还有其他标志,例如 IMG_INIT_JPG(有关更多信息,请查看 IMG_Init)。要初始化多个标志,请使用 | OR 运算符,例如

const int FLAGS = IMG_INIT_PNG | IMG_INIT_JPG;

您还需要使用 IMG_Quit 关闭子系统。

/* Initialise SDL_image */
const int FLAGS = IMG_INIT_PNG;

if (IMG_Init(FLAGS) != FLAGS) {
  fprintf(stderr, "SDL_image failed to initialise: %s\n", IMG_GetError());
  return -1;
}

/* Automatically execute IMG_Quit at exit */
atexit(IMG_Quit);

由于我们使用的是 SDL_image,因此我们必须使用 IMG_GetError 代替 SDL_GetError

加载图像

[编辑 | 编辑源代码]

加载图像非常简单,只需在 SDL_Surface 上使用 IMG_Load 函数即可。与 IMG_Init 一样,我们必须使用 IMG_GetError

wb->image = IMG_Load(WB_IMAGE_PATH);

if (wb->image == NULL) {
  fprintf(stderr, "WikiBook failed to load image: %s\n", IMG_GetError());
  return -1;
}

请记住,要确保图像的文件路径是正确的,即 WB_IMAGE_PATH!我们正在渲染 PNG 图像!

华夏公益教科书