ifstream读取图片,Qt载入显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ifstream读取图片,Qt载入显示相关的知识,希望对你有一定的参考价值。

应用场景:

需要显示图片的同时也需要图片的二进制数据。例如需要将图片作为二进制数据转化为string发送,而同时需要显示图片。

 

主要思路:

将图片文件用二进制格式读入,然后将二进制数据加载到 QImage 中,达到显示效果。让后根据需要,将读取到的二进制数据自行做处理。

 

主要代码:

        //begin
    std::ifstream fileInput("F:\\\\VSprojects\\\\DChat\\\\1.jpg", std::ios_base::binary);
    
    //获取文件大小
    fileInput.seekg(0, std::ios_base::end);
    const size_t maxSize = fileInput.tellg();

    //重置文件指针
    fileInput.seekg(0, std::ios_base::end);    

    //读取图片文件
    char *picBin = new char[maxSize];
    fileInput.read(picBin, maxSize);

    //载入二进制数据初始化Qimage
    QImage img;
    img.loadFromData((uchar*)picBin, maxSize);

    //显示图片QImage
    QDialog *newDialog = new QDialog();
    QLabel *picLabel = new QLabel(newDialog);
    picLabel->setPixmap(QPixmap::fromImage(img));

    newDialog->show();
    newDialog->setVisible(true);

    //复制图片
    std::ofstream fileOutput("F:/VSprojects/DChat/2.jpg", std::ios_base::binary);
    fileOutput.write(picBin, maxSize);

    fileInput.close();
    fileOutput.close();
        //end
    

 

其他说明:

std::ifstream::seekg(streampos pos);  //设置指针位置。

std::ifstream::seekg(strrampoff off, std::ios_base::seekdir way); //设置指针起始位置以及偏移量, off为偏移量。

参考:http://www.cplusplus.com/reference/istream/istream/seekg/

 

结果截图:

 

技术分享

技术分享

 

最后:

如有错漏,欢迎指点。。

以上是关于ifstream读取图片,Qt载入显示的主要内容,如果未能解决你的问题,请参考以下文章

VTK读取图片,然后QT显示

Qt下使用OpenGL读取和显示3ds模型

机器学习进阶-图像基本处理-视频的读取与处理 1.cv2.VideoCapture(视频的载入) 2.vc.isOpened(载入的视频是否可以打开) 3.vc.read(视频中一张图片的读取)

qt设置了背景图片在windows下显示正常但是在板上没显示

ifstream 在读取文件 3 次后中断

C++ Ifstream 读取太多?