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 回答