SDL(簡單直接媒體層) - 渲染其他影像格式
外觀
渲染其他影像格式需要使用另一個 SDL 庫:SDL_image。但是,渲染不同影像格式的過程與渲染BMP 影像非常相似。在本節中,我們將演示如何將 PNG 檔案渲染到視窗上。
您可以在此GitLab 儲存庫中下載本節的原始碼。所有原始碼都儲存在此組中。
我們將以以下方式在 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 影像!