图片转换成16进制数据,在显示成图片

1.目的:

         在串行,或者网络通信的时候,往往需要把图片解析成16进制的数据,方便数据的传输。而在另一端接收到数据后,在将接收到的数据显示成图片。

2:代码:

#include"mainwindow.h"

#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QString filename;
    //获取图片的路径,和名字
    filename=QFileDialog::getOpenFileName(this,tr("选择图片"),QDir::currentPath());
    QImage img(filename);
    QByteArray ba;
    QBuffer buf(&ba);
    buf.open(QIODevice::WriteOnly);
//按照PNG解码保存数据,具体看Qt文档,有解释
    img.save(&buf,"PNG");
    //因为文本输入的格式为str
    QString str;
    str.append(ba.toHex);
    ui->textEdit->setText(str);
    //点击曹函数,将文本中的数据转换成图片
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(open()));
}
/***************************************************************************************
因为是从接收到的数据,转换成图片,不是在本地去打开一个图片去显示,所以有些函数是不行的;
比如:
     
bool loadFromData(const QByteArray & data, const char * format = 0)
 
bool load(const QString & fileName, const char * format = 0)
   这两个函数虽然可以打开图片,但是好像只支持在本地打开,他们加载的是这个图片所在目录下的节点
或者是文件描述符。而不是真正的数据。所以用这个函数:
bool loadFromData(const uchar * data, int len, const char * format = 0)
将16进制的数据转换成uchar的格式;
****************************************************************************************/

void MainWindow::open(){
   //从文本中获取数据,16进制的字符串。
  QString str_temp=ui->textEdit->toPlainText();
   //将16进制的字符串转换成uchar的类型。
    uchar date[str_temp.size()/2]={0};
    bool ok;
    int i=0;
    while(ilabel->setPixmap(pix);
        }
        else {
            QMessageBox::about(this,tr("失败   "),"1111111");
            return ;
        }
}
MainWindow::~MainWindow()
{
    delete ui;
}













 

你可能感兴趣的:(QT,qt,图片解析)