簡単な描画ツールを作成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`

結果

drawpic3.png というPNG形式の画像ファイルに画像が保存される。