0
点赞
收藏
分享

微信扫一扫

QT显示Raw格式的图片

刘员外__ 2022-03-11 阅读 274

        在使用QT进行图像显示时,对于如jpg和png等图片格式的实现可以借助QT很方便的就实现,但是使用QT显示Raw数据时,则相对麻烦一点,主要的原因在于Raw格式的图片不包含关于图片的高度、宽度和数据类型等信息,因此需要在进行图像显示时将上述信息进行指定。

在使用QT进行Raw数据显示时,本文推荐使用QLable进行。首先,在ui界面上绘制一个控件Label。其次,绘制一个按钮PushButton。

        在PushButton的槽函数内编写下面的代码段,即可显示数据格式为Raw的lena图像,此处lena图像的数据类型为ushort,大小为512×512。

        在使用QLabel进行Raw图像显示时有以下注意事项:

        1. 需要将读取到的Raw文件内数据映射到0-255,然后转化为uchar格式。

        2.使用image.scaled方法可以将图像的大小根据所设置Label的尺寸进行缩放。

        3.记得对所开辟内存空间的及时销毁。

void MainWindow::on_pushButton_clicked()
{
    // 定义Raw数据的宽度和高度
    int w = 512;
    int h = 512;

    // 读取Raw文件的数据
    FILE *pImage = NULL;
    QString filename = "E:\\lena.raw";
    pImage = fopen(filename.toLocal8Bit(), "rb");

    ushort* pData16 = new ushort[w * h];
    fread(pData16, sizeof(unsigned short), h * w, pImage);

    // 将Raw文件的数据映射到0-255,并转化为uchar类型
    int Ii,Ixn;
    int Imax = pData16[0], Imin = pData16[0];
    for (int i = 0; i < h * w; i++)
    {
        Ii = pData16[i];
        if (Ii > Imax)
            Imax = Ii;
        if (Ii < Imin)
            Imin = Ii;
    }
    Ixn = Imax - Imin;

    uchar* pData8 = new uchar[w * h];
    for(int i = 0; i < w * h; i++)
    {
        pData8[i] = ((pData16[i] - Imin) * 255 / Ixn);
    }

    QImage image = QImage(pData8, h, w, h, QImage::Format_Indexed8); //封装QImage
    QImage result =image.scaled(ui->label->width(), ui->label->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    ui->label->setPixmap(QPixmap::fromImage(result));
    ui->label->repaint();
    qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
    fclose(pImage);
    delete[]pData16;
    delete[]pData8;
}
举报

相关推荐

0 条评论