如何在Qt中设置RGB888图像的QImage像素颜色



我有一个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中的像素。我该怎么办呢?

我认为这个问题可能与您初始化图像的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();
}

有几件事你需要确认:

  1. 根据您正在使用的QImage构造器,确保img_inQImage对象的整个生命周期内保持有效。顺便说一下,QImage析构函数不会删除你的数据(img_in)。

  2. 如果你设置的像素位置不是有效坐标,setPixel()的行为是未定义的。

我怀疑第一种情况,img_in可能从QImage中消失。您可能想尝试使用其他构造函数(如QImage(10, 10, QImage::Format_RGB888))创建QImage,并使用setPixel()

相关内容

  • 没有找到相关文章

最新更新