【问题标题】:How to set QImage pixel colour for an RGB888 image in Qt如何在 Qt 中为 RGB888 图像设置 QImage 像素颜色
【发布时间】:2011-12-19 16:15:04
【问题描述】:

我有一个 RGB888 格式的 qImage 定义如下:

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

我想改变特定的像素值,所以我按照here的例子,像这样:

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

然而,无论 i 和 j 的值如何,这总是会产生分段错误(例如 i = j = 2)。

我猜这是因为我错误地使用QRgb 来操作QImage::Format_RGB888 中的像素。我应该怎么做?

【问题讨论】:

    标签: qt rgb qimage pixel-manipulation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要确认几件事:

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

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

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

      【讨论】:

      • 谢谢,这就是问题所在;我不知道 img_in 实际上只是一个指向它所引用的基础数据的指针。
      • 根据 Qt 文档,setPixel() 对于大图像来说很昂贵。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多