跳轉到內容

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 影像!

華夏公益教科書