SDL2に続いてSDL_imageを使う。
マニュアルを読むとpngの読込関数なんかが入っているが、別途libpng等を使っているのでただのラッパーだと思われる。
URL https://www.libsdl.org/projects/SDL_image/
ダウンロード SDL2_image-devel-2.0.5-VC.zip (Visual C++ 32/64-bit)
パス設定
include : SDL2_image-2.0.5\include
lib : SDL2_image-2.0.5\lib\x64
// このマクロを定義しないとエントリポイントが SDL_main になる #define SDL_MAIN_HANDLED #include <SDL.h> // IMG_Load #include <SDL_image.h> #pragma comment(lib,"SDL2.lib") #pragma comment(lib,"SDL2_image.lib") // 必要ファイル: // SDL2.dll // SDL2_image.dll // libpng16-16.dll // zlib1.dll int main(int argc, char* argv[]) { // これがないと IMG_Loadがnullptrを返す //SDL_Init(SDL_INIT_VIDEO); // PNG読むなら必要 //IMG_Init(IMG_INIT_PNG); // ↑の筈なんだが無くても動いたりする? ////////////////////////////// Uint32 rmask, gmask, bmask, amask; #if SDL_BYTEORDER == SDL_BIG_ENDIAN rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x000000ff; #else rmask = 0x000000ff; gmask = 0x0000ff00; bmask = 0x00ff0000; amask = 0xff000000; #endif ////////////////////////////// //■ レンダラ作成 SDL_Surface* surf_out = SDL_CreateRGBSurface(0, 500, 500, 32, rmask, gmask, bmask, amask); SDL_Renderer* rend_out = SDL_CreateSoftwareRenderer(surf_out); //////////////////////////// // 画像を読み込んでコピー SDL_Surface* surf_in = IMG_Load("C:\\test\\data\\a.png"); SDL_BlitSurface(surf_in, nullptr, surf_out, nullptr); SDL_FreeSurface(surf_in); //////////////////////////// // アルファブレンドの設定 SDL_SetRenderDrawBlendMode(rend_out, SDL_BLENDMODE_BLEND); ////////////////////////////// // 赤で直線 SDL_SetRenderDrawColor(rend_out, 255, 0, 0, 100); SDL_RenderDrawLine(rend_out, 50, 20, 500, 200); // ファイルに保存 //SDL_SaveBMP(surf_out, "out.bmp"); IMG_SavePNG(surf_out, "out.png"); ////////////////////////////// //■ レンダラ破棄 SDL_DestroyRenderer(rend_out); SDL_FreeSurface(surf_out); return 0; }
結果のサイズを500x500に設定しているのでクリップされている。