std::ifstream以二进制方式读取图片文件,用Qt再将其转为图片(QImage::loadFromData()函数使用)

  上篇文章中谈到谈到ifstrem可以以二进制形式读取图片文件,读取方式与读取txt方式一样,将不再赘述。本文将重点讨论“如何将图片二进制数据转换为图片”。

       实际很简单,借助QImage这个非常强大的工具类就可以实现,这个类实际可以直接加载图片文件的,我们先暂时忽略这一点。看看这是怎样的一个过程:

代码如下

#include "widget.h"
#include "ui_widget.h"


#include <iostream>
#include <fstream>


void Widget::fstream_read_text(const std::string& str_path)
{
    using std::ifstream;

	// [1]得到二进制数据;
    ifstream i_f_stream(str_path, 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("C:/Users/Administrator/Desktop/test.png"), "png");
	ui->label->setPixmap(QPixmap::fromImage(img));

    delete [] buffer;
 }

测试结果如下:

 

左图为拷贝到左面图片,右图为设置设置到label的图片。

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值