サーフェスを画像として保存
SDL_imageでサーフェスを画像として保存するには、下記の関数を使用します。
IMG_SavePNG関数
サーフェスをpngファイルとして保存します。
宣言
int IMG_SavePNG( SDL_Surface* surface, const char* file );
引数
surface | サーフェスのアドレスです。 |
file | 保存するファイルのパスです。 |
戻り値
保存に成功すると「0
」を返し、失敗すると「エラーコード( 負の数 )」を返します。
IMG_SaveJPG関数
サーフェスをjpgファイルとして保存します。
宣言
int IMG_SaveJPG( SDL_Surface* surface, const char* file, int quality );
引数
surface | サーフェスのアドレスです。 |
file | 保存するファイルのパスです。 |
quality | 品質値です。この値を小さくすると画質を落とし、ファイルサイズを小さくできます。 この値の範囲は「 0 」から「100 」です。 |
戻り値
保存に成功すると「0
」を返し、失敗すると「エラーコード( 負の数 )」を返します。
SDL_SaveBMP関数
サーフェスをbmpファイルとして保存します。
宣言
int SDL_SaveBMP( SDL_Surface* surface, const char* file );
引数
surface | サーフェスのアドレスです。 |
file | 保存するファイルのパスです。 |
戻り値
保存に成功すると「0
」を返し、失敗すると「エラーコード( 負の数 )」を返します。
サンプルプログラム
#include <SDL_image.h>
#include <SDL_ttf.h>
TTF_Font* g_font = nullptr;
SDL_Surface* g_shaded_string_surface = nullptr;
SDL_Surface* g_anti_aliased_string_surface = nullptr;
bool Initialize();
void Finalize();
bool CreateStringSurfaces();
int main( int argc, char* argv[] )
{
if ( !Initialize() )
{
Finalize();
return -1;
}
IMG_SavePNG( g_anti_aliased_string_surface , u8"string.png" );
IMG_SaveJPG( g_shaded_string_surface , u8"string.jpg", 100 );
SDL_SaveBMP( g_anti_aliased_string_surface , u8"string.bmp" );
Finalize();
return 0;
}
bool Initialize()
{
if ( TTF_Init() == -1 )
{
SDL_Log( u8"SDL_ttfの初期化処理に失敗しました。エラーメッセージ: %s", TTF_GetError() );
return false;
}
g_font = TTF_OpenFont( u8"arial.ttf", 32 );
if ( g_font == nullptr )
{
SDL_Log( u8"フォントの読み込みに失敗しました。エラーメッセージ: %s", TTF_GetError() );
return false;
}
if ( !CreateStringSurfaces() ) return false;
return true;
}
void Finalize()
{
if ( g_shaded_string_surface != nullptr ) SDL_FreeSurface( g_shaded_string_surface );
if ( g_anti_aliased_string_surface != nullptr ) SDL_FreeSurface( g_anti_aliased_string_surface );
if ( g_font != nullptr ) TTF_CloseFont ( g_font );
TTF_Quit();
}
bool CreateStringSurfaces()
{
auto string_color = SDL_Color();
string_color.r = 0;
string_color.g = 255;
string_color.b = 255;
string_color.a = 255;
auto shaded_color = SDL_Color();
shaded_color.r = 100;
shaded_color.g = 100;
shaded_color.b = 100;
shaded_color.a = 255;
g_shaded_string_surface = TTF_RenderUTF8_Shaded ( g_font, u8"shaded string" , string_color, shaded_color );
g_anti_aliased_string_surface = TTF_RenderUTF8_Blended( g_font, u8"anti aliased string" , string_color );
if ( g_shaded_string_surface == nullptr )
{
SDL_Log( u8"網掛けをかけて文字列を描画したサーフェスの作成に失敗しましたエラーメッセージ: %s", TTF_GetError() );
return false;
}
if ( g_anti_aliased_string_surface == nullptr )
{
SDL_Log( u8"アンチエイリアスをかけて文字列を描画したサーフェスの作成に失敗しました。エラーメッセージ: %s", TTF_GetError() );
return false;
}
return true;
}
※ このプログラムではSDL_ttfを併用しています。