我的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
中的像素。我该怎么做呢?
答案 0 :(得分: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();
}
答案 1 :(得分:5)
您需要确认的内容很少:
根据您使用的QImage constructor,请确保img_in
在QImage
对象的整个生命周期内保持有效。顺便说一下,QImage
析构函数不会删除您的数据(img_in
)。
如果您设置的像素位置不是有效坐标,则setPixel()
的行为未定义。
我怀疑第一个案例,img_in
可能会从QImage
消失。您可能想尝试使用其他构造函数(例如QImage
)创建QImage(10, 10, QImage::Format_RGB888)
并使用setPixel()
。