はい、それでは 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を定義し、そこにサムネイルと元の大きさの画像を表示しています。
実行すると以下のようになります。
以上です。次回は今回よりも高速な別のサムネイル作成方法です。
