目次 - 3.関数 - 3.2読み込み/保存 - IMG_Load_RW

IMG_Load_RW

画像をSDL_RWopsからサーフェイスに読み込む

構文

SDL_Surface * IMG_Load_RW(SDL_RWops *src, int freesrc)

引数

src読み込むSDL_RWops
freesrc0でないときsrcを自動的に閉じる/解放する. 0のとき開いたままにする

戻り値

新しいSDLサーフェイスを戻す. エラーのときNULLを戻す.

サンプルコード

// sample.pngをimageに読み込む
SDL_Surface *image;
image=IMG_Load_RW(SDL_RWFromFile("sample.png", "rb"), 1);
if(!image) {
    printf("IMG_Load_RW: %s\n", IMG_GetError());
    // ここでエラー処理を行う
}

詳細

SDL_SurfaceはCPUからアクセスできるメモリ上のピクセルバッファである. 後でデータを他に渡したり, 操作する場合はこれを使うことになる.

生成されたSDL_Surfaceの形式には保証がない. 多くの場合, SDL_imageは画像と完全に一致するサーフェイスを生成しようとするが, 変換される場合もある. (SDLが直接対応していない形式の画像や, 様々な形式で圧縮されていてSDL_imageがそのうちの1つを選択した場合など.) SDL_Surfaceの形式を精査し, その後SDL_ConvertSurface()で必要な形式に変換することもできる.

画像ファイルが透過ピクセルに対応している場合, SDLはサーフェイスにカラーキーを設定する. 以下のようにすると呼び出し後にRLEアクセラレーションを有効にできる:
SDL_SetColorKey(image, SDL_RLEACCEL, image->format->colorkey);

freesrcが0以外の場合, 処理が成功してもしなくてもRWopsは閉じる. この関数を呼んだとき, どのような場合でもSDL_imageは必要ならばRWopsを全て読み込む.

SDL_RWopsを使わずにディスクからファイルを読み込む別の関数も存在する. IMG_Load("filename.jpg")のようにすると, アプリケーションがSDL_RWopsを操作し, 拡張子からファイル形式を判別する.

IMG_LoadTyped_RW()関数も存在する. これはSDL_imageがファイル形式を自動的に判別できない場合に備えてファイル拡張子("BMP", "JPG")を指定できること以外はこの関数と同じである.

SDLの2DレンダリングAPIを使用する場合, GPUが使用するSDL_Textureに画像を直接読み込むIMG_LoadTexture_RW()をこの関数の代わりに使うこと.

戻されたサーフェイスを使い終えたならば, アプリケーションはSDL_FreeSurface()で破棄する必要がある.

バージョン

SDL_image 2.0.0以降

関連項目(関数)

IMG_Load
IMG_LoadTyped_RW
SDL_FreeSurface

原文へのリンク

SDL_image/IMG_Load_RW