趣味で作ってるロボット用ソフトウェア
 All Classes Files Functions Enumerations Enumerator Friends Pages
画像の表示

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>
#include "Main_window.h"
#include "View.h"
#include "Scene.h"
#include "Layer.h"
#include "Label.h"
#include "Image_surface.h"
#include "delay.h"
using namespace hrk;
int main(int argc, char *argv[])
{
static_cast<void>(argc);
static_cast<void>(argv);
Main_window main_window;
main_window.show(SizeF(640, 480));
View view(main_window);
Scene* scene = view.front();
Layer* layer = scene->front();
Image_surface png_surface("png_image.png");
Image_surface jpg_surface("jpg_image.jpg");
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;
}
image_surface_example_image.png
実行結果