Qt QImage显示错误的灰度图像

Moh*_*Moh 5 c++ qt grayscale qimage

我想在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);
Run Code Online (Sandbox Code Playgroud)

zeF*_*chy 2

我的猜测是您的缓冲区在显示之前已被释放并部分覆盖。您有责任确保在使用不执行深复制的构造函数时数据缓冲区保持有效。

引用Qt 文档

构造具有给定宽度、高度和格式的图像,该图像使用现有的内存缓冲区、数据。宽度和高度必须以像素为单位指定。bytesPerLine 指定每行的字节数(步幅)。

缓冲区必须在 QImage 的整个生命周期内保持有效,并且所有副本均未修改或以其他方式与原始缓冲区分离。图像在销毁时不会删除缓冲区。您可以提供一个函数指针 cleanupFunction 以及一个额外的指针 cleanupInfo,当最后一个副本被销毁时将调用该指针。