スポンサーリンク

SDL_imageを使う

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に設定しているのでクリップされている。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: