3

私のプロジェクトは、多数 (30000) の小さな jpeg 画像 (400*300) を 15 の異なる宛先サイズ (ソースよりも小さい) に一括してサイズ変更することです。

最初に、CImg と libjpg に基づいてマルチスレッド コマンド ライン ツールを作成し、画像をバッチ処理しました。そして、私の 4*2 コアの Ubuntu メモ帳 (20 分) でチャームとして機能します。

クライアントは、進行状況バー、推定時間、プレビューなどを備えたツールの GUI を必要としています。また、Windows でも動作するようにします。彼は一種のイメージマネージャーを望んでいます。

純粋な C++ コマンドラインを Qt とその QImage クラス (QtConcurrent::run for multi-threading) に移植し始めましたが、ここで問題が発生しました: 同じマシンで、Windows 7 x64 では 3 倍遅くなります (約 50 分)!

では、Qt を使用して画像を読み取り、CImg を使用してサイズを変更するにはどうすればよいでしょうか。そして、それはより速く実行されますか?

4

2 に答える 2

3

これが私がやったことです:

void convert(QStringList files, QString destDir) {
    foreach (QString file, files) {
      CImg<unsigned char> image(file.toStdString().c_str());
      QString destFile = destDir + QFileInfo(file).fileName();
      image.get_resize(200, 200, -100, -100, 1).save_jpeg(destFile.toStdString().c_str(), 70);
  }
}

のインスト:

QImage img;
foreach (QString file, files) {
img.load(file);
QString destFile = destDir + QFileInfo(file).fileName();
img.scaled(200, 200, Qt::IgnoreAspectRatio, Qt::FastTransformation).save(destFile, 0, 70);
}

2~3倍速く走る

于 2011-07-16T16:19:57.420 に答える
2

それがより速く実行されるかどうかは、測定せずに判断するのは困難ですが (私はそう推測しますが)、それでも良い考えです. コマンド ライン ツール用のインターフェイス (GUI ではなく API) を作成し、Qt で GUI パーツをビルドし、そこから画像サイズ変更バックエンドの API を呼び出します。

いずれにせよ、これはアプリケーション開発にとって優れた (基本原則と呼ぶこともできます) 設計です。このような小さなプロジェクトの場合、やり過ぎになることもありますが、「バックエンド」部分がすでにあるので、とにかく問題ありません。

于 2011-07-12T11:48:23.540 に答える