如何在Qt QImage中使用颜色LUT
我有一些遗留代码写入NITF文件以显示一些图像。在遗留代码中,看起来好像有一个LUT被使用,并且有一段代码一次写出一行到NITF文件,并且该行的值计算如下:
// convert RGB to LUT values
unsigned char *lutData = new unsigned char[numBytes/3];
for (unsigned j = 0 ; j < numBytes/3 ; j++)
lutData[j] = (unsigned char) stuff;
数据是我原始的无符号字符数组。
所以现在我试图获取该数据数组并将其输出到我的GUI中的QImage中。
在我看来,在NITF中,有一块LUT数据的大小是“行x列”,对吧?所以我创建了一个lut数据数组:
unsigned char *lutData = new unsigned char[imwidth * imheight];
QImage *qi = new QImage(imwidth,imheight, QImage::Format_Indexed8);
for (int i = 0 ; i < imheight ; i++)
{
#pragma omp parallel for
for (int j = 0 ; j < imwidth ; j++)
{
lutData[i*imwidth + j] = stuff;
}
}
然后我试着像这样填充qimage:
for (int i = 0 ; i < imheight ; i++)
{
#pragma omp parallel for
for (int j = 0 ; j < imwidth ; j++)
{
qi->setPixel(j,i,qRgb(lutData[i*imwidth + j],lutData[i*imwidth + j],lutData[i*imwidth + j]));
}
}
然而,这似乎或多或少只是给我一个灰度图像,而不是我的实际数据。
我究竟做错了什么?
谢谢!
没有找到相关结果
已邀请:
2 个回复
柑恫祟
对于所有三种颜色,您传递的是相同的值(
),因此最终会得到一个灰度图像。 现在,qRgb只是一个
ed
,所以如果你以这种格式存储颜色(RGB32 / ARGB32),你可以调用:
但是你可能想要研究使用QImage的内置查找表(也就是颜色表)支持 - 它可能最终变得如此简单:
希望这可以帮助! 更新:为了参考,这里是我用于在索引颜色模式下尝试QImage的测试代码(使用g ++编译时没有警告 - 只记得链接到-lQtCore和-lQtGui):
眠缝
它基本上填满了8位颜色表,因为它从888转换为8位数据。为了获得更好的结果,您可以在索引处累积RGB值,然后在将值放入颜色表之前对这些值进行平均。它还可以在步行图像缓冲区时使用一些优化。