QT开发技术【显示raw图像】

一、思路 读取raw文件,利用QImage 显示

*RAW文件**是 数码相机 或其他摄影设备中生成的未处理的图像 数据文件,通常包含更多细节和信息,提供了更大的后期编辑空间。 与标准的JPEG或PNG格式不同,RAW文件并不直接显示为图像,而是保留了相机传感器的原始数据,允许用户对图像进行更精细的处理和优化。

需要固定像素

二、代码演示

    int nPixelWidth = ui->spinBox_PixelWidth->value();
    int nPixelHeight = ui->spinBox_PixelHeight->value();
    
    QString strFilePath = ui->lineEdit_FilePath->text();
    if (strFilePath.isEmpty())
    {
        QMessageBox::warning(this, TransString2Unicode("警告"), TransString2Unicode("请选择图像数据文件"));
        return;
    }

    if (nPixelWidth <= 0 || nPixelHeight <= 0)
    {
        QMessageBox::warning(this, TransString2Unicode("警告"), TransString2Unicode("图像像素尺寸必须大于0"));
        return;
    }

    QFile file(strFilePath);
    if (!file.open(QIODevice::ReadOnly))
    {
        QMessageBox::warning(this, TransString2Unicode("警告"), TransString2Unicode("无法打开图像数据文件"));
        return;
    }

    QFileInfo qfi(strFilePath);
    QString strFileName = qfi.absolutePath()+ "/" + qfi.baseName() + ".jpg";

    QByteArray qbaData = file.readAll();
    file.close();


    size_t nSize = nPixelWidth * nPixelHeight * 2;

    if (qbaData.size() != nPixelWidth * nPixelHeight * 2)
    {
        QMessageBox::warning(this, TransString2Unicode("警告"), TransString2Unicode("像素不匹配"));
        return;
    }

    if (ui->radioButton_DataFile->isChecked())
    {
        qbaData = ConvertBuffer12to8(qbaData);

        QImage qimgImage(reinterpret_cast<const uchar*>(qbaData.data()), nPixelWidth, nPixelHeight, QImage::Format_Grayscale8);

        qimgImage.save(strFileName);
        QPixmap pixmap = QPixmap::fromImage(qimgImage);
        ui->label_Local->setMinimumSize(pixmap.size());

        ui->label_Local->setPixmap(pixmap.scaled(ui->label_Local->width() * m_dShowPercent, ui->label_Local->height() * m_dShowPercent,
            Qt::KeepAspectRatio, Qt::SmoothTransformation)); 
    }

三、测试结果

QT开发技术【显示raw图像】_第1张图片

你可能感兴趣的:(C++,QT开发技术,qt,开发语言)