在应用程序中,我处理图像,其中每个像素是无符号或浮点数,每个值都是具有给定灰度级的像素。我有可用的源,所以我可以自由访问图像的数据。
我需要使用qt框架显示/保存和加载这些图片。目前处理转换的唯一方法是获取并设置每个像素,这些像素证明有点慢。
有没有其他方法可以转换这些图像?
答案 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()要快得多。