Bil*_*ham 2 rgb qt qimage pixel-manipulation
我有一个RGB888格式的qImage定义如下:
myQrgb = QImage(img_in, width, height, QImage::Format_RGB888);
Run Code Online (Sandbox Code Playgroud)
我想改变特定的像素值,所以我按照这里的例子,如下:
QRgb value = qRgb(0, 0, 0);
myQrgb.setPixel(i, j, value);
Run Code Online (Sandbox Code Playgroud)
然而,无论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();
}
Run Code Online (Sandbox Code Playgroud)
您需要确认的事项很少:
根据您正在使用的QImage构造函数,确保img_in在QImage对象的整个生命周期内保持有效.顺便说一下,QImage析构函数不会删除你的数据(img_in).
如果您设置的像素位置不是有效坐标,则setPixel()行为未定义.
我怀疑第一种情况,img_in可能正在消失QImage.您可能想尝试创建一个QImage使用其他构造函数,QImage(10, 10, QImage::Format_RGB888)并使用setPixel().
| 归档时间: |
|
| 查看次数: |
27944 次 |
| 最近记录: |