png や jpg 画像などを表示するためのサーフェスです。
画像の読み込みには SDL_image ライブラリを用いており、そこで生成したサーフェスを OpenGL のテクスチャに変換して利用しています。
lib/gui/Image_surface.cpp より抜粋
SDL_image の IMG_Load() 関数を用いて、画像を SDL_Surface に読み込み、それを hrk::Sdl_gl_texture クラスに渡して OpenGL のテクスチャ形式に変換しています。
pImpl(const string& image_file, bool transparent)
: texture_(IMG_Load(image_file.c_str()), transparent)
{
if (!texture_.is_valid()) {
log_printf("%s: %s\n", image_file.c_str(), IMG_GetError());
}
}
hrk::Image_surface 用のサンプルでは、png 画像と jpg 画像を表示しています。サンプルでは、手前に描画する png 画像の一部が透明になるように設定しています。
lib/gui/example/image_surface_example.cpp
#include <SDL.h>
using namespace hrk;
int main(int argc, char *argv[])
{
static_cast<void>(argc);
static_cast<void>(argv);
main_window.show(
SizeF(640, 480));
Scene* scene = view.front();
Layer* layer = scene->front();
Label png_label(&png_surface);
Label png_label_2nd(&png_surface);
Label jpg_label(&jpg_surface);
Label jpg_label_2nd(&jpg_surface);
layer->push_front(&png_label);
layer->push_front(&jpg_label);
layer->push_front(&png_label_2nd);
layer->push_front(&jpg_label_2nd);
int image_width = png_label.width();
png_label_2nd.set_position(
PointF(100, 100));
jpg_label.set_position(
PointF(image_width, 0));
jpg_label_2nd.set_position(
PointF(100 + image_width, 100));
view.redraw();
view.redraw();
delay_sec(1.5);
return 0;
}
実行結果