使用Qt显示灰度图像

4
我一直尝试使用Qt显示灰度图像。图像数据从一个不包含头的.txt文件中加载,该文件包含256x256个浮点数据。我尝试了在这个链接中发布的解决方案。
我使用了QLabel类来调用uchar* image_data_arraysetPixmap。尽管我能够打开一个Qt GUI窗口,但窗口只显示空白屏幕。
imageLabel -> setPixmap(QPixmap::fromImage(*myImage));

2
最好将您的两个问题分成两个不同的问题,这样回答问题的人可以更容易地专注于每个问题。这也有助于未来其他人访问相关部分。 - Shai
如果您在这里提出了两个问题,我同意Shai的观点。我建议您确保在QLabel中显示未经修改的QPixmap有效,然后再进行修改。 - user336063
3个回答

3
QImage img = AImage;
if (!AImage.isNull())
{
    int pixels = img.width() * img.height();
    if (pixels*(int)sizeof(QRgb) <= img.byteCount())
    {
        QRgb *data = (QRgb *)img.bits();
        for (int i = 0; i < pixels; i++)
        {
            int val = qGray(data[i]);
            data[i] = qRgba(val, val, val, qAlpha(data[i]));
        }
    }
}
return img;

使用RGBA来获得良好的灰度效果。


2
你是如何将灰度图像数据加载到 QImage 中的?
QT 没有灰度图像类型,只有二值图像类型。你可以创建 R=G=B=grey 的 RGB 图像。或者更好的方法是使用 QImage::Format_Indexed8,并创建一个颜色表,其中每个条目具有与索引相同的值。例如:
QImage *qi = new QImage(data_ptr, width, height, QImage::Format_Indexed8);
QVector<QRgb> my_table;
for(int i = 0; i < 256; i++) my_table.push_back(qRgb(i,i,i));
qi->setColorTable(my_table);

灰度图像数据首先从256x256文本文件中加载。由于我正在加载文本数据,因此不需要执行setColorTable操作。您如何显示QImage? - deguolao
就像我之前所说的,QT没有灰度格式,因此您需要做一些工作来制作适当的图像。QImage :: Format_Indexed8是一种调色板格式,因此您确实需要设置一个表格来显示每个索引表示的颜色。您可以通过许多方法显示图像;使用QPixmap,制作自定义小部件,使用QGraphicsView等。 - koan

0
在QT 5.9.1中,有一个选项可以创建灰度图像:
QImage *qi = new QImage(data_ptr, width, height, QImage::Format_Grayscale8);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接