簡単な描画ツールを作成3(画像保存)
概要
前回のツールは閉じると画像が破棄されていたので 画像をファイルに保存出来るようにする。前回作ったツールの画像データはGdk::Pixmap、すなわちXサーバ側が保持しているため、 そのままではファイルに保存することは出来ない。そこでGdk::Pixbuf経由で アプリケーション側のメモリに画像データをコピーし、Gdk::Pixbuf::save()でファイルに保存する。
前回との違いはデストラクタで画像を保存するようにしたこと だけである。従って今回はデストラクタのコードだけを載せることにする。
ソース
drawpic3.cpp(デストラクタのみ)MyDrawArea::~MyDrawArea() { Glib::RefPtr< Gdk::Pixbuf > pixbuf; int w, h; m_pixmap->get_size( w, h ); try{ // pixmap -> pixbuf にデータコピー // Glib::RefPtr< Gdk::Drawable >にキャストしないとコンパイルエラーが出る pixbuf = Gdk::Pixbuf::create( Glib::RefPtr< Gdk::Drawable >::cast_dynamic( m_pixmap ), m_pixmap->get_colormap() , 0, 0, 0, 0, w, h ); // 保存 pixbuf->save( "drawpic3.png", "png" ); } catch( const Glib::Error& e ){ std::cerr << e.what() << std::endl; } }
コンパイル
必要なコンパイルオプションは pkg-config を使って取得する。g++ drawpic3.cpp -o drawpic3 `pkg-config gtkmm-2.4 --cflags --libs`