Qt/Gcc


                                                                                                                                                              2013.01.21作成
7.5 QPixmapからQImageへの変換とファイルへの保存
  
 QPixmapに描画した画像(図形)をJpegなどのファイルに保存します。この処理を関数化して、次の章でメニューからセーブできるように
 します。
  以下のような順番を取ります。
   1.QPixmapに描画
   2.QPixmapからQImageに変換
   3.QImageをファイルにセーブ

 1.については、別途7-4で説明したのでここでは省略します。
 2、3についてソースコードを示して説明します。

 2.QPixmapからQImageに変換
 このプログラムは、QPixmapをQGraphicsPixmapItemとして扱っています。直接QPixmapからQImageに変換してもよいですが、
 ここでは、QGraphicsPixmapItemの関数で前期ItemのPixmapにアクセスして、そこからQImageに変換します。
 具体的には以下のコードとなります。
   //gitemはQGraphicsPixmapItemの変数
     const QImage img = gitem->pixmap().toImage();//QGraphicsPixmapItemの関数でQPixmapにアクセスして、QPixmapを QImageに変換
        QImage image;//テンポラリ
        if (img.format() != QImage::Format_RGB32){//RGB32フォーマットかを確認した上で必要ならデータ変換する。
             image = img.convertToFormat(QImage::Format_RGB32);
         }
        else
            image = img;

 3.QImageをファイルにセーブ
  以下は、QImageのデータを保存するコードです。
 ファイルダイアログを表示させて、ファイルを保存します。
    QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
                                                        "/home/YOUER FOLDER/untitled.png",tr("Images (*.bmp *.xpm *.jpg)"));
       image.save(fileName,0,-1);

  上記のYOUER FOLDERは、それぞれの環境に合わせて、たとえば、/mypc/Qtprgなどとします。

  上記コードを関数化して、MainWindowに定義します。
void MainWindow::GPixitemsave(QGraphicsPixmapItem *gitem)
{

        const QImage img = gitem->pixmap().toImage();//pixmapをimageに変換する。
        QImage image;

        //変換したイメージがRGB32形式(ARGB32でもよい)でなかったら、RGB32に変換する。
        if (img.format() != QImage::Format_RGB32){
             image = img.convertToFormat(QImage::Format_RGB32);
         }
        else
            image = img;

    //上記コードは以下でもよい。     
    //const QImage image = (img.depth() < 32 ? img.convertToFormat(QImage::Format_RGB32) : img);
        
        //以下はフォルダなどがないときのエラー処理をしていない。
       
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
                                                        "/home/YOUER FOLDER/untitled.png",tr("Images (*.bmp *.png *.jpg)"));
       image.save(fileName,0,-1);//イメージをセーブする。
}




インデックスに戻る
トップページに戻る