从灰度图像到QImage的快速转换

Fast conversion from gray level image to QImage

本文关键字:转换 QImage 灰度图像      更新时间:2023-10-16

在应用程序中,我处理的图像中每个像素要么是无符号的,要么是浮点数,每个值都是具有给定灰度级别的像素。我有可用的资源,因此我可以自由访问图像的数据。

我需要使用 qt 框架显示/保存和加载这些图片。目前,处理转换的唯一方法是获取并设置每个像素,这被证明有点慢。

还有其他方法可以转换这些图像吗?

与其使用 QImage::setPixel,不如直接访问图像缓冲区。

使用所需的格式、宽度和高度创建图像后,可以使用 QImage::bits() 访问内存缓冲区,也可以使用 QImage::scanLine() 检索指向图像中每行开头的指针,并直接在内存中设置像素:这比为每个像素调用 setPixel() 要快得多。

QImage有一个构造函数,该构造函数采用指向现有缓冲区/图像的指针:

    QImage ( uchar * data, int width, int height, Format format )

它不拥有缓冲区的所有权,也不复制内容,因此您有责任确保缓冲区在QImage的整个生命周期内有效。

注意:QImage需要 32 位对齐的图像行,因此您可能需要将图像行复制到具有适当填充的新缓冲区中。您只有无符号或浮点数像素,因此它不适用于您(已经是 32 位值),但请记住这一点,如果您将来有不同的像素类型。