zoukankan      html  css  js  c++  java
  • 【QT】二进制读取图像文件并显示

    打开对话框选择文件

    二进制方式读取文件

    转换成图像显示

    void MainWindow::showImage()
    {
        //打开文件对话框
    
        QString lastPath="D:/Englishpath/QTprojects/DATA/videoData";
        fileName = QFileDialog::getOpenFileName(this,"OpenFile", lastPath);
        if(fileName.isEmpty())
        {
            QMessageBox::information(this,"Error Message","Select File Failed");
            return;
        }
        QFile file(fileName);
        if(!file.open(QIODevice::ReadOnly))
        {
            QMessageBox::information(NULL,"失败提示","打开失败",QMessageBox::Ok,QMessageBox::Ok);
            return;
        }
    //    QTextStream in(&file);
    //    ui->textEdit->setText(in.readAll());
    
        //类型转换为可以被ifstream使用的
        QString str =fileName;
        char *s; QByteArray//QString转换为char*
        ba = str.toLatin1();
        s = ba.data();
    
        // [1]得到二进制数据;
        using std::ifstream;
        ifstream i_f_stream(s,ifstream::binary);
        i_f_stream.seekg(0, i_f_stream.end);
        int length = i_f_stream.tellg();
        i_f_stream.seekg(0, i_f_stream.beg);
        char *buffer = new char[length];
        i_f_stream.read(buffer, length);//一次性读取
        i_f_stream.close();
    
        // [2]缓存数据重构;
        QByteArray byteArray(buffer, length);
    
        // [3] 构建图片对象并载入二进制数据;
        QImage img;
        img.loadFromData(byteArray, "png");
    
        // [4] 结果检测(将图片保存到某一目录、用label显示);
        img.save(QString("test.bmp"), "png");
        ui->d_label->setPixmap(QPixmap::fromImage(img));
    
        delete [] buffer;
    
    //    QDataStream in(&file);
    //    while( !in.atEnd())
    //    {
    //        QByteArray s;
    //        in >> s;
    //        file.close();
    //        qDebug()<<s<<endl;
    //    }
    }

    【转载自】

    std::ifstream以二进制方式读取图片文件,用Qt再将其转为图片(QImage::loadFromData()函数使用) - ypy9323的博客 - CSDN博客 https://blog.csdn.net/ypy9323/article/details/81835530

  • 相关阅读:
    GridView简单应用
    利用Field获取图片
    css的三种书写方式
    css选择器概述
    关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
    easyUI按钮图表对照大全
    jquery绑定点击事件的三种写法
    css中关于table的相关设置
    Leetcode 287. 寻找重复数
    LeetCode 278. 第一个错误的版本
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/10796886.html
Copyright © 2011-2022 走看看