Qtで画像データのシーケンスを保存しようとすると問題が発生します。ここ QtがQImageが正しく読み込まれていると誤って認識しています
は、問題を示すコードの一部である:第1ループに
#include <vector>
#include <iostream>
#include <QImage>
...
const int nFrames = 1000;
std::vector<int> sizes(nFrames);
std::vector<uchar*> images(nFrames);
for (int k = 0; k < nFrames; k++)
{
QImage *img = new QImage("/.../sample.png");
uchar *data = img->bits();
sizes.at(k) = img->width() * img->height();
images.at(k) = data;
}
std::cout << "Data loaded \"successfully\"." << std::endl;
for (int k = 0; k < nFrames; k++)
{
std::cout << k << ": " << (int) (images.at(k)[0]) << std::endl;
}
、プログラムをロードQImageのオブジェクト及びポインタのimages
ベクトルにビットマップを置きます。 2番目のループでは、各フレームのピクセルを読み取るだけです。
問題は、ヒープメモリがいっぱいになっても、プログラムは最初のループを通って不平を言わずに進むことです。プログラムの出力によって示されるようにその結果、私は、第二のループでクラッシュを取得:
Data loaded "successfully".
0: 128
1: 128
2: 128
...
192: 128
[crash before hitting 1000]
問題を再現するには、以下のグレースケール画像を使用することができ、あなたが値を変更する必要があるかもしれませんnFrames
のメモリ容量によって異なります。
私の質問は:メモリがいっぱいになったかどうかを検出する方法で最初のループにデータをロードするにはどうしたらいいですか?私は必ずQImageオブジェクトをメモリ内に保持する必要はなく、images
ベクトルのデータだけを保持します。全ての
Btwでは、ヒープに 'QImage'を作成する必要はありません。それは牛をサポートします。 –