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

本文介绍了一种在Qt环境下将图片转换为16进制数据的方法,并提供了具体的实现代码。通过这种方式,可以在串行或网络通信中更便捷地传输图片数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.目的:

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

2:代码:

#include"mainwindow.h"

#include "ui_mainwindow.h"
#include<QFileDialog>
#include<QDir>
#include<QDebug>
#include<QBuffer>
#include<QMessageBox>
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()));
}
/***************************************************************************************
因为是从接收到的数据,转换成图片,不是在本地去打开一个图片去显示,所以有些函数是不行的;
比如:
     
boolloadFromData(const QByteArray & data, const char * format = 0)
 
boolload(const QString & fileName, const char * format = 0)
   这两个函数虽然可以打开图片,但是好像只支持在本地打开,他们加载的是这个图片所在目录下的节点
或者是文件描述符。而不是真正的数据。所以用这个函数:
boolloadFromData(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(i<num)
   {
        date[i]=str_temp.mid(i*2,2).toInt(&ok,16);
        i++;
    }

   //将数据加载,转成图片显示
        QPixmap pix;
        if(pix.loadFromData(date,num))
        {
            ui->label->setPixmap(pix);
        }
        else {
            QMessageBox::about(this,tr("失败   "),"1111111");
            return ;
        }
}
MainWindow::~MainWindow()
{
    delete ui;
}













 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值