画像のマトリックスを作成して、一部のウィジェットでプレビューを表示した後に、たとえばjpg
ファイルに保存したいと思います。私は、ピクセルごとにすべてのイメージピクセルを大きなものにコピーすることができますが、それは効率的な方法ではありませんでした。もっと良い解決策はありますか?QT - 少数の画像を結合して1つのクラスにするクラスはありますか?
アドバイスありがとうございます。
画像のマトリックスを作成して、一部のウィジェットでプレビューを表示した後に、たとえばjpg
ファイルに保存したいと思います。私は、ピクセルごとにすべてのイメージピクセルを大きなものにコピーすることができますが、それは効率的な方法ではありませんでした。もっと良い解決策はありますか?QT - 少数の画像を結合して1つのクラスにするクラスはありますか?
アドバイスありがとうございます。
個々のピクセルをコピーする代わりに、すべての画像を組み合わせて保持するのに十分な大きさの個々の画像を直接描画するだけです。 QImage
はQPixmap
の代わりに同様に使用することができること
QList<QPixmap> images;
QPixmap collage;
// Make sure to resize collage to be able to fit all images.
...
for (QList<QPixmap>::const_iterator it = images.begin(); it != images.end(); ++it)
{
int x = 0;
int y = 0;
// Calculate x & y coordinates for the current image in the collage.
...
QPainter painter(&collage);
painter.drawPixmap(
QRectF(x, y, (*it).width(), (*it).height()), *it,
QRectF(0, 0, (*it).width(), (*it).height()));
}
注:コラージュは、次に(未テストコード)次のようにコラージュに個々の画像を描画することによって生成することができます。 QPixmap
はオンスクリーンディスプレイに最適です。詳細は、Qt documentationを参照してください。
いいえ、ピクセル単位でこれを行う必要はありません。 QImageはQPaintDeviceです。したがって、それらを読み込んで互いにレンダリングし、好きなようにいくつかの形式で保存することができます。もちろん、それらを画面に表示します。
上記のコードは私のために働いていない、私は理由を理解することはできません。
私はコラージュが必要でした:
PicA | PicB | Pic ... | ... |
私はQImageと同様のものを見つけました。このコードは動作します。
(テストコード):
const int S_iconSize = 80; //The pictures are all quadratic.
QList<const QPixmap*> t_images;//list with all the Pictures, PicA, PicB, Pic...
QImage resultImage(S_iconSize*t_images.size(), S_iconSize, QImage::Format_ARGB32_Premultiplied);
QPainter painter;
painter.begin(&resultImage);
for(int i=0; i < t_images.size(); ++i)
{
painter.drawImage(S_iconSize*i, 0, t_images.at(i)->toImage(), 0, 0, S_iconSize, S_iconSize, Qt::AutoColor);
}
painter.end();
QPixmap resultingCollagePixmap = QPixmap::fromImage(resultImage);
は、私はそれはQImageのはQPixmapのとその逆に変換され、醜い原因である知っているが、それは動作します。 誰かが上記のコードを(Ton van den Heuvelから)実行する方法を知っていれば、私はうれしいでしょう。 (たぶんQPainterが足りないのですか?)
よろしくお願いします。
私はうまくいきません。プログラムが 'collage.paintEngine() - > drawPixmap'でクラッシュします。理由は何でしょうか? – Jet