Qt/Gcc
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);//イメージをセーブする。
}