如何将具有16位整数的图像转换为QPixmap

时间:2017-01-12 18:13:52

标签: c++ image qt

我正在使用具有专有图像格式的软件。我需要能够在QT GUI中显示这些图像的修改版本。有一种方法(Image-> getpixel(x,y))返回一个16位整数(每像素16位)。需要明确的是,16位数字不代表RGB颜色格式。它实际上代表了被拍摄部分上特定点(高度图)的测量或尺寸。我需要在图像中获取尺寸范围(整数)并应用要用颜色表示的比例。然后,我需要使用该信息为QPixmap构建一个可以在Qlabel中显示的图像。这是一般的要点......

QByteArray Arr;
unsigned int Temp;
for (int N = 0; N < Image->GetWidth(); N++) {
    for (int M = 0; M < Image->GetHeight(); M++) {
        Temp = Image.GetPixel(N,M);
        bytes[0] = (Temp >> 8) & 0xFF;
        bytes[1] = Temp & 0xFF;
        Arr.push_back(bytes[0]);
        Arr.push_back(bytes[1]);
    }
}

// Take the range of 16 bit integers.  Example (14,982 to 16,010)
// Apply a color scheme to the values
// Display the image
QPixmap Image2;
Image2.loadFromData(Arr);
ui->LabelPic->setPixmap(Image2);

思想?

此屏幕截图是我尝试复制的示例。重要的是要注意图像的着色不是图像中的基础数据所固有的。它是应用程序缩放高度值并将颜色方案应用于整数范围的结果。 enter image description here

2 个答案:

答案 0 :(得分:2)

有关专有图像格式的信息是有限的,因此根据上述说明,下面是猜测或思考(根据要求):

QImage img(/*raw image data*/ (const uchar*) qbyteArr.data(),
   /*columns*/ width, /*height*/ rows,
   /*bytes per line*/ width * sizeof(uint16),
   /*format*/ QImage::Format_RGB16); // the format is likely matching the request

QPixpam pixmap(img);                 // if the pixmap is needed

答案 1 :(得分:0)

我在这里找到了答案。

Algorithm to convert any positive integer to an RGB value

至于实际格式,我选择将16位整数转换为QImage :: Format_RGB888来创建热图。这是通过将标度应用于整数范围并使用标度绘制不同的颜色方程来实现的。