我想在Qt 5.12中将0到255之间的整数矩阵可视化为灰度图像。首先,我构建了一个示例256x256 uchar数组,每行的值在0到255之间。然后我尝试以QImage和format_grayscale作为格式显示图像。但是令人困惑的是,生成的图像在最后一行中包含受干扰的像素。
结果图像
我还创建了一个灰度彩色地图,并尝试使用format_indexed8,但结果相同。这是我的代码。
uchar imageArray[256][256];
for (int i = 0; i < 256; i++)
{
for (int j = 0; j < 256; j++)
{
imageArray[i][j] = uchar(j);
}
}
QImage image(&imageArray[0][0],
256,
256,
QImage::Format_Grayscale8);
答案 0 :(得分:2)
我的猜测是,在释放缓冲区之前,缓冲区已被释放并被部分覆盖。您有责任确保在使用不执行深度复制的构造函数时,数据缓冲区保持有效。
构造具有给定宽度,高度和格式的图像,该图像使用 现有的内存缓冲区数据。宽度和高度必须为 以像素为单位指定。 bytesPerLine指定每字节的字节数 线(步幅)。
在QImage和所有QImage的整个生命周期中,缓冲区必须保持有效 尚未修改或以其他方式脱离的副本 原始缓冲区。映像不会删除销毁的缓冲区。 您可以提供函数指针cleanupFunction以及其他功能 指针cleanupInfo,当最后一个副本是 毁了。
答案 1 :(得分:1)
您不应使用矩阵,而应使用大小为256x256 = 65535的数组,
因此,而不是:
uchar imageArray[256][256];
使用:
uchar imageArray[65536];
然后用所需的值填充数组。 然后,调用QImage的构造函数:
QImage image(imageArray, 256, 256, QImage::Format_Grayscale8);