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

时间:2012-06-19 05:32:35

标签: c++ image qt image-processing

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

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

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

2 个答案:

答案 0 :(得分:2)

QImage有一个构造函数,它接受一个指向现有缓冲区/图像的指针:

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

它不取得缓冲区的所有权,也不复制内容,因此您要负责缓冲区在QImage的整个生命周期内都有效。

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

答案 1 :(得分:2)

您应该直接访问图像缓冲区,而不是使用QImage :: setPixel。

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