画像の操作
画像処理が可能なライブラリはいろいろ存在します。複雑な画像処理を行う場合は OpenCV を使用しなければならないかもしれませんが、ここでは Qt ライブラリを使った手軽な方法を解説します。 TreeFrog Framework のベースライブラリである Qt はGUI ツールキットなので、画像処理のための便利な関数がたくさん用意されているのです。
まず、画像の処理を行うためには、QtGUIモジュールを有効にした TreeFrog Framework が必要です。 フレームワークをリコンパイルしましょう。
Linux / Mac OS Xの場合:
$ ./configure --enable-gui-mod
$ cd src
$ make
$ sudo make install
$ cd ../tools
$ make
$ sudo make install
Windows の場合:
> configure --enable-debug --enable-gui-mod
> cd src
> nmake install
> cd ..\tools
> nmake instal
> cd ..
> configure --enable-gui-mod
> cd src
> nmake install
> cd ..\tools
> nmake install
次に、Web アプリケーション側にも設定が必要です。プロジェクトファイル(.pro)を編集し、変数QTに “gui” を追加します。
:
QT += network sql gui
:
このように設定すると、アプリは GUI アプリとしてビルドされることになり、特に Linux では実行環境として X Window System が必要になります。
この要件を満たせない場合は、画像処理ライブラリとして OpenCV を使われることをお薦めします。
画像のリサイズ
次のコードは、JPEG 画像を、アスペクト比を保ったまま QVGA サイズに変換し保存する例です。
QImage img = QImage("src.jpg").scaled(320, 240, Qt::KeepAspectRatio);
img.save("qvga.jpg");
※ 実際には、ファイルパスとして絶対パスで記述してください。
この QImage クラスを使えば、アスペクト比を無視して変換することも可能ですし、別の画像フォーマットに変換することも容易です。詳細は Qt ドキュメントをご覧ください。
画像の回転
次のコードは、画像を時計回りに90度回転させる例です。
QImage img("src.jpg");
QImage rotatedImg = img.transformed(QMatrix().rotate(90.0));
rotatedImg.save("rotated.jpg");
とても簡単です。
画像の合成
2つの画像を重ね合わせてみましょう。大きな画像の右上の座標へ小さな画像を合成します。
QImage background("back.jpg");
QPainter painter(&background);
painter.drawImage(0, 0, QImage("small.jpg"));
background.save("composition.jpg");
元の画像へのペインタを用意し、そこへ別の画像を描画しています。