添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
通常はGdk::Pixbuf::create_from_file()を用いて画像ファイルを読み込むことが 出来るが、ファイルサイズが大きい画像を別スレッドで読み込みたい時や、画像の幅や高さだけを 知りたい時などにはGdk::PixbufLoaderを使用すると便利である。 Gdk::PixbufLoader::write()でデータを入力し、Gdk::PixbufLoader::close()で終了する。 その後Gdk::PixbufLoader::get_pixbuf()でGdk::PixBufを取得できる。また画像の幅や高さ を取得したらGdk::PixbufLoader::signal_size_prepared()がemitされる。 ploader.cpp #include #include void on_size_prepared( int w, int h ){ std::cout << "on_size_prepared width = " << w << " height = " << h << std::endl; int main( int argc, char *argv[] ) Gtk::Main kit( argc, argv ); Glib::RefPtr< Gdk::PixbufLoader > loader = Gdk::PixbufLoader::create(); loader->signal_size_prepared().connect( sigc::ptr_fun( &on_size_prepared ) ); FILE* f = fopen( "./test.png", "rb" ); if( f ){ const size_t bufsize = 4096; size_t rsize; guint8 data[ bufsize ]; while( ( rsize = fread( data, 1, bufsize, f ) ) ){ std::cout << "read " << rsize << " byte\n"; loader->write( data, rsize ); loader->close(); Glib::RefPtr< Gdk::Pixbuf > pixbuf = loader->get_pixbuf(); std::cout << "width = " << pixbuf->get_width() << " height = " << pixbuf->get_height() << std::endl; fclose( f ); return 0; g++ ploader.cpp -o ploader `pkg-config gtkmm-2.4 --cflags --libs` $ ./ploader read 4096 byte on_size_prepared width = 320 height = 240 read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 4096 byte read 2724 byte width = 320 height = 240 この様に、ファイルを全て読み込まなくても幅と高さを取得できていることが分かる。