文字列を描画したサーフェスの作成と破棄
SDL_ttfで文字列を描画したサーフェスの作成( 文字列からサーフェスの作成 )と破棄をするには、下記の関数を使用します。
TTF_RenderUTF8_Solid関数
文字列を描画したサーフェスを作成します。
宣言
SDL_Surface* TTF_RenderUTF8_Solid( TTF_Font* font, const char* text, SDL_Color fg );
引数
font | フォントのアドレスです。 |
text | サーフェスに描画する文字列です。 |
fg | 文字の色です。 |
戻り値
作成に成功すると「( 文字列を描画した )サーフェスのアドレス」を返し、失敗すると「NULL
」を返します。
TTF_RenderUTF8_Shaded関数
網掛けをかけて( 背景を塗りつぶして )文字列を描画したサーフェスを作成します。
宣言
SDL_Surface* TTF_RenderUTF8_Shaded( TTF_Font* font, const char* text, SDL_Color fg, SDL_Color bg );
引数
font | フォントのアドレスです。 |
text | サーフェスに描画する文字列です。 |
fg | 文字の色です。 |
bg | 網掛けの色です。 |
戻り値
作成に成功すると「サーフェスのアドレス」を返し、失敗すると「NULL
」を返します。
TTF_RenderUTF8_Blended関数
アンチエイリアスをかけて文字列を描画したサーフェスを作成します。
宣言
SDL_Surface* TTF_RenderUTF8_Blended( TTF_Font* font, const char* text, SDL_Color fg );
引数
font | フォントのアドレスです。 |
text | サーフェスに描画する文字列です。 |
fg | 文字の色です。 |
戻り値
作成に成功すると「サーフェスのアドレス」を返し、失敗すると「NULL
」を返します。
SDL_FreeSurface関数
サーフェスを破棄します。
宣言
void SDL_FreeSurface( SDL_Surface* surface );
引数
surface | サーフェスのアドレスです。 |
サンプルプログラム
#include <SDL_ttf.h>
int main( int argc, char* argv[] )
{
if ( TTF_Init() == -1 )
{
SDL_Log( u8"SDL_ttfの初期化処理に失敗しました。エラーメッセージ: %s", TTF_GetError() );
return -1;
}
auto font = TTF_OpenFont( u8"arial.ttf", 16 );
if ( font == nullptr )
{
SDL_Log( u8"フォントの読み込みに失敗しました。エラーメッセージ: %s", TTF_GetError() );
TTF_Quit();
return -1;
}
auto string_color = SDL_Color();
string_color.r = 0;
string_color.g = 0;
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;
auto string_surface = TTF_RenderUTF8_Solid ( font, u8"string" , string_color );
auto shaded_string_surface = TTF_RenderUTF8_Shaded ( font, u8"shaded string" , string_color, shaded_color );
auto anti_aliased_string_surface = TTF_RenderUTF8_Blended( font, u8"anti aliased string" , string_color );
if ( string_surface == nullptr )
{
SDL_Log( u8"文字列を描画したサーフェスの作成に失敗しました。エラーメッセージ: %s", TTF_GetError() );
goto FAILED_TO_CREATE_SURFACE;
}
if ( shaded_string_surface == nullptr )
{
SDL_Log( u8"網掛けをかけて文字列を描画したサーフェスの作成に失敗しましたエラーメッセージ: %s", TTF_GetError() );
goto FAILED_TO_CREATE_SURFACE;
}
if ( anti_aliased_string_surface == nullptr )
{
SDL_Log( u8"アンチエイリアスをかけて文字列を描画したサーフェスの作成に失敗しました。エラーメッセージ: %s", TTF_GetError() );
goto FAILED_TO_CREATE_SURFACE;
}
// 文字列を描画したサーフェスを使用する処理
FAILED_TO_CREATE_SURFACE:
if ( string_surface != nullptr ) SDL_FreeSurface( string_surface );
if ( shaded_string_surface != nullptr ) SDL_FreeSurface( shaded_string_surface );
if ( anti_aliased_string_surface != nullptr ) SDL_FreeSurface( anti_aliased_string_surface );
TTF_CloseFont( font );
TTF_Quit();
return 0;
}