はい、それでは QImageによるサムネイル作成をやっていきます。
このやり方は簡単ですが低速です。画像の枚数が多い場合は他のやり方が必要となります。
(一応次の記事を予定しています。)
サンプルは独自のものを使います。
そして、いつものようにQtCreaterなどでMainWindowなどのGUI部品を定義済みであるとします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではコードを
(mainwindow.h)
namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT//マクロ public: explicit MainWindow(QWidget *parent = 0);//コンストラクタ ~MainWindow();//デストラクタ protected: void paintEvent(QPaintEvent *);//←ここ重要!ペイントイベント private: Ui::MainWindow *ui;//uiにはGUI部品が記述 };
(mainwindow.cpp)
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)//uiにはGUI部品に関する記述 { ui->setupUi(this);//uiのGUI部品の初期化 } MainWindow::~MainWindow() { delete ui; } void MainWindow::paintEvent(QPaintEvent *)//←重要!ペイントイベント { QImage image = QImage("//home//ubuntu001//sampleImage2.png"); QImage thumbnail = image.scaled(128, 128, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);//サムネイル128×128で良画質で作成 QPainter widgetPainter(this);//ウィジット用のQPainter widgetPainter.drawImage(50, 50, thumbnail);//サムネイル描画 widgetPainter.drawImage(150, 50, QImage("//home//ubuntu001//sampleImage2.png"));/*比較のため元の大きさの画像も描画*/ }
はい簡単ですね。 理解に重要なのはpaintEventだけですので他は無視してしまっても構いません。
まずimageに画像を読込みます。次にimage.scaledを呼び出しthumbnailにサムネイルを作成します。この場合128×128の良画質になります。なおIgnoreAspectTatioなどの値はリファレンスを参照してください。(リファレンス)
この後はウィジット用(この場合MainWindow)のQPainterを定義し、そこにサムネイルと元の大きさの画像を表示しています。
実行すると以下のようになります。
以上です。次回は今回よりも高速な別のサムネイル作成方法です。