2011-12-19 437 views
2

我有一个RGB888格式QImage的定义如下:如何设置QImage的像素颜色为RGB888图像Qt中

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中的像素。我该怎么做呢?

回答

5

有你需要确认几件事情:

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

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

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

+0

谢谢,这是问题;我不知道img_in其实只是指向它所引用的底层数据的指针。 – 2012-01-05 18:18:00

5

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