2

次のように定義された RGB888 形式の qImage があります。

myQrgb = QImage(img_in, width, height, QImage::Format_RGB888);

特定のピクセル値を変更したいので、ここの例に従いました。

QRgb value = qRgb(0, 0, 0);
myQrgb.setPixel(i, j, value);

ただし、これにより、i と j の値に関係なく、常にセグメンテーション違反が発生します (たとえば、i = j = 2)。

QRgbでピクセルを操作するために誤って使用しているためだと推測していQImage::Format_RGB888ます。代わりに何をすべきですか?

4

2 に答える 2

6

img_in問題は、イメージを初期化するデータに関連している可能性があると思います。データが有効であると確信していますか?

次の例では、角に黒い正方形がある白い正方形を正常にペイントします。

#include <QtGui>

int main(int argc, char **argv) {
  QApplication app(argc, argv);

  QImage img(100, 100, QImage::Format_RGB888);
  img.fill(QColor(Qt::white).rgb());

  for (int x = 0; x < 10; ++x) {
    for (int y = 0; y < 10; ++y) {
      img.setPixel(x, y, qRgb(0, 0, 0));
    }
  }

  QLabel l;
  l.setPixmap(QPixmap::fromImage(img));
  l.show();

  return app.exec();
}
于 2011-12-19T16:41:15.777 に答える
5

確認する必要があることがいくつかあります。

  1. 使用しているQImage コンストラクターによるとimg_in、オブジェクトの存続期間全体にわたって有効であることを確認してくださいQImage。ちなみに、QImageデストラクタはデータを削除しません ( img_in)。

  2. 設定しているピクセル位置が有効な座標でない場合、setPixel()の動作は未定義です。

最初のケースimg_inは、おそらく から消えているのではないかと思いQImageます。QImageのような他のコンストラクターを使用して を作成し、QImage(10, 10, QImage::Format_RGB888)で遊んでみることをお勧めしますsetPixel()

于 2011-12-19T16:33:56.553 に答える