シリーズ記事ディレクトリ
SDL2 簡潔なチュートリアル (1): Cmake と Conan を使用して SDL2 プログラミング環境を構築する
SDL2 簡単なチュートリアル (2): 空のウィンドウを作成する
SDL_IMAGEを統合
SDL2 Concise Tutorial (3): 画像の表示では
、SDL2 に付属の機能を使用して bmp 画像SDL_LoadBMP()
をインポートします。ただし、この関数は 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 パッケージの詳細については、sdl_image-conan センターを参照してください。次に、SDL2 Concise Tutorial (1): Cmake と Conan を使用して SDL2 プログラミング環境を構築する のようにコードをビルドしてください。
SDL_IMAGEを使って画像をインポート
sdl_image の使い方は非常に簡単です。最初にヘッダー ファイルをインポートします。
#include <SDL_image.h>
次に、sdl_image をIMG_Init()
初期化する
IMG_Init(IMG_INIT_JPG);
現在、sdl_image は次の 4 つの形式をサポートしています。
- 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 を初期化してクリーンアップする必要がありますが、これは非常に簡単です。