上篇文章中谈到谈到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的图片。