在一个应用程序中,我处理每个像素是无符号或浮点数的图像,每个值都是具有给定灰度级别的像素。我有可用的源,所以我可以自由访问图像的数据。
我需要使用 qt 框架显示/保存和加载这些图片。目前处理转换的唯一方法是获取和设置每个像素,这被证明有点慢。
有没有其他方法可以转换这些图像?
在一个应用程序中,我处理每个像素是无符号或浮点数的图像,每个值都是具有给定灰度级别的像素。我有可用的源,所以我可以自由访问图像的数据。
我需要使用 qt 框架显示/保存和加载这些图片。目前处理转换的唯一方法是获取和设置每个像素,这被证明有点慢。
有没有其他方法可以转换这些图像?
而不是使用 QImage::setPixel 您应该直接访问图像缓冲区。
创建所需格式、宽度和高度的图像后,可以使用 QImage::bits() 访问内存缓冲区,也可以使用 QImage::scanLine() 检索指向图像中每一行开头的指针并直接在内存中设置像素:这比为每个像素调用 setPixel() 快得多。
QImage
有一个构造函数,它接受一个指向现有缓冲区/图像的指针:
QImage ( uchar * data, int width, int height, Format format )
它不获取缓冲区的所有权,也不复制内容,因此您有责任确保缓冲区在QImage
.
注意: QImage
需要 32 位对齐的图像行,因此您可能需要将图像逐行复制到具有适当填充的新缓冲区中。您只有无符号或浮点像素,因此它不适用于您(已经是 32 位值),但请记住,如果您将来有不同的像素类型。