QT编写图片数据转换工具
2014-04-30 08:45
176 查看
http://www.cnblogs.com/feiyangqingyun/archive/2011/01/25/1944500.html
学习QT已经一个月了,觉得QT真是个好东西,他的这种跨平台机制简直太棒了!还有QML这东西,真牛B!在这段学习期间,因为一个项目的需要,需要将图片转成数据,然后传出去,那边接收到数据后再对应转换成图片,才有了下面这个小工具,开发环境:QT4.7.0,在LINUX下面重新编译也可以在LINUX下面运行,代码不用改!先放张截图吧。
本人比较懒,还是贴出代码来吧!其中主要就是两个函数。
voidpicToData(QStringfromPic,QStringtoData,QStringmyformat);
frmmain.cpp代码:
#include"frmmain.h"
#include"ui_frmmain.h"
frmmain::frmmain(QWidget*parent):
QWidget(parent),
ui(newUi::frmmain)
{
ui->setupUi(this);
}
frmmain::~frmmain()
{
deleteui;
}
//图片转数据
voidfrmmain::picToData(QStringfromPic,QStringtoData,QStringmyformat)
{
QImageimg(fromPic);
QByteArrayba;
QBufferbuf(&ba);
img.save(&buf,"JPG");//按照JPG解码保存数据
QByteArraycc=qCompress(ba,1);
QByteArrayhh;
if(myformat=="Hex")
{
hh=cc.toHex();//16进制数据
}
else
{
hh=cc.toBase64();//base64数据
}
QStringstr(hh);
QFilefile(toData);
if(file.open(QFile::WriteOnly))
{
file.write(str.toLatin1());
file.close();
}
}
//数据转图片
voidfrmmain::dataToPic(QStringfromData,QStringtoPic,QStringmyformat)
{
QFilefile(fromData);
if(file.open(QFile::ReadOnly))
{
QByteArrayread=file.readAll();
file.close();
QStringss=QString::fromLatin1(read.data(),read.size());
QByteArrayrc;
if(myformat=="Hex")
{
rc=QByteArray::fromHex(ss.toAscii());
}
else
{
rc=QByteArray::fromBase64(ss.toAscii());
}
QByteArrayrdc=qUncompress(rc);
QImageimg;
img.loadFromData(rdc);
img.save(toPic);
}
}
QStringfrmmain::getFileName(QStringfilter)
{
QStringfileName;
fileName=QFileDialog::getOpenFileName(this,tr("选择文件"),QCoreApplication::applicationDirPath(),filter);
if(!fileName.isEmpty())
{
returnfileName;
}
else
{
return"";
}
}
QStringListfrmmain::getFileNames(QStringfilter)
{
QStringListfileNames;
fileNames=QFileDialog::getOpenFileNames(this,tr("选择文件"),QCoreApplication::applicationDirPath(),filter);
if(!fileNames.isEmpty())
{
returnfileNames;
}
else
{
returnfileNames;
}
}
voidfrmmain::on_btn1_clicked()
{
ui->pic->setText(this->getFileName(tr("图片文件(*.jpg)")));
}
voidfrmmain::on_btn2_clicked()
{
ui->txt->setText(this->getFileName(tr("文本文件(*.txt)")));
}
voidfrmmain::on_btnPicToData_clicked()
{
if(ui->pic->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择图片文件"));
return;
}
if(ui->txt->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择文本文件"));
return;
}
if(ui->rbtn16->isChecked())
{
this->picToData(ui->pic->text(),ui->txt->text(),"Hex");
}
else
{
this->picToData(ui->pic->text(),ui->txt->text(),"Base64");
}
}
voidfrmmain::on_btnDataToPic_clicked()
{
if(ui->pic->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择图片文件"));
return;
}
if(ui->txt->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择文本文件"));
return;
}
if(ui->rbtn16->isChecked())
{
this->dataToPic(ui->txt->text(),ui->pic->text(),"Hex");
}
else
{
this->dataToPic(ui->txt->text(),ui->pic->text(),"Base64");
}
}
voidfrmmain::on_btnSelectFile_clicked()
{
ui->listWidget->addItems(this->getFileNames(tr("图片文件(*.jpg)")));
}
voidfrmmain::delayTime(ints)
{
QTimet=QTime::currentTime().addMSecs(s);
while(QTime::currentTime()<t)
{
QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
}
voidfrmmain::on_btnSelectTxt_clicked()
{
ui->listWidget->addItems(this->getFileNames(tr("文本文件(*.txt)")));
}
voidfrmmain::on_btnChangeToTxt_clicked()
{
QListWidgetItem*myitem;
if(ui->listWidget->count()==0)
{
return;
}
for(inti=0;i<ui->listWidget->count();i++)
{
QStringtimeNow=QTime::currentTime().toString("hhmmss");
QStringdateNow=QDate::currentDate().toString("yyyyMMdd");
QStringsaveFileName=QCoreApplication::applicationDirPath()+tr("/imagedata/%1%2.txt").arg(dateNow,timeNow);
myitem=ui->listWidget->item(i);
if(ui->rbtn16->isChecked())
{
this->picToData(myitem->text(),saveFileName,"Hex");
}
else
{
this->picToData(myitem->text(),saveFileName,"Base64");
}
this->delayTime(1000);//为了确保命名不冲突和转换完成,延时1秒
}
QMessageBox::information(this,tr("提示"),tr("恭喜你!转换完成!"));
}
voidfrmmain::on_btnChangeToJpg_clicked()
{
QListWidgetItem*myitem;
if(ui->listWidget->count()==0)
{
return;
}
for(inti=0;i<ui->listWidget->count();i++)
{
QStringtimeNow=QTime::currentTime().toString("hhmmss");
QStringdateNow=QDate::currentDate().toString("yyyyMMdd");
QStringsaveFileName=QCoreApplication::applicationDirPath()+tr("/imageto/%1%2.jpg").arg(dateNow,timeNow);
myitem=ui->listWidget->item(i);
if(ui->rbtn16->isChecked())
{
this->dataToPic(myitem->text(),saveFileName,"Hex");
}
else
{
this->dataToPic(myitem->text(),saveFileName,"Base64");
}
this->delayTime(1000);//为了确保命名不冲突和转换完成,延时1秒
}
QMessageBox::information(this,tr("提示"),tr("恭喜你!转换完成!"));
}
还有不完善的地方,欢迎提出意见!
学习QT已经一个月了,觉得QT真是个好东西,他的这种跨平台机制简直太棒了!还有QML这东西,真牛B!在这段学习期间,因为一个项目的需要,需要将图片转成数据,然后传出去,那边接收到数据后再对应转换成图片,才有了下面这个小工具,开发环境:QT4.7.0,在LINUX下面重新编译也可以在LINUX下面运行,代码不用改!先放张截图吧。
本人比较懒,还是贴出代码来吧!其中主要就是两个函数。
voidpicToData(QStringfromPic,QStringtoData,QStringmyformat);
voiddataToPic(QStringfromData,QStringtoPic,QStringmyformat);
外加几个辅助处理函数:
QStringgetFileName(QStringfilter);//获取打开对话框中指定格式的文件QStringListgetFileNames(QStringfilter);//获取打开对话框中指定格式的文件列表
voiddelayTime(ints);
frmmain.h代码:
#ifndefFRMMAIN_H
#defineFRMMAIN_H
#include<QWidget>
#include<QtGui>
#include<QDrag>
namespaceUi{
classfrmmain;
}
classfrmmain:publicQWidget
{
Q_OBJECT
public:
explicitfrmmain(QWidget*parent=0);
~frmmain();
private:
Ui::frmmain*ui;
privateslots:
voidon_btnChangeToJpg_clicked();
voidon_btnChangeToTxt_clicked();
voidon_btnSelectTxt_clicked();
voidon_btnSelectFile_clicked();
voidon_btnDataToPic_clicked();
voidon_btnPicToData_clicked();
voidon_btn2_clicked();
voidon_btn1_clicked();
voidpicToData(QStringfromPic,QStringtoData,QStringmyformat);
voiddataToPic(QStringfromData,QStringtoPic,QStringmyformat);
QStringgetFileName(QStringfilter);//获取打开对话框中指定格式的文件
QStringListgetFileNames(QStringfilter);//获取打开对话框中指定格式的文件列表
voiddelayTime(ints);
};
#endif//FRMMAIN_H
frmmain.cpp代码:
#include"frmmain.h"
#include"ui_frmmain.h"
frmmain::frmmain(QWidget*parent):
QWidget(parent),
ui(newUi::frmmain)
{
ui->setupUi(this);
}
frmmain::~frmmain()
{
deleteui;
}
//图片转数据
voidfrmmain::picToData(QStringfromPic,QStringtoData,QStringmyformat)
{
QImageimg(fromPic);
QByteArrayba;
QBufferbuf(&ba);
img.save(&buf,"JPG");//按照JPG解码保存数据
QByteArraycc=qCompress(ba,1);
QByteArrayhh;
if(myformat=="Hex")
{
hh=cc.toHex();//16进制数据
}
else
{
hh=cc.toBase64();//base64数据
}
QStringstr(hh);
QFilefile(toData);
if(file.open(QFile::WriteOnly))
{
file.write(str.toLatin1());
file.close();
}
}
//数据转图片
voidfrmmain::dataToPic(QStringfromData,QStringtoPic,QStringmyformat)
{
QFilefile(fromData);
if(file.open(QFile::ReadOnly))
{
QByteArrayread=file.readAll();
file.close();
QStringss=QString::fromLatin1(read.data(),read.size());
QByteArrayrc;
if(myformat=="Hex")
{
rc=QByteArray::fromHex(ss.toAscii());
}
else
{
rc=QByteArray::fromBase64(ss.toAscii());
}
QByteArrayrdc=qUncompress(rc);
QImageimg;
img.loadFromData(rdc);
img.save(toPic);
}
}
QStringfrmmain::getFileName(QStringfilter)
{
QStringfileName;
fileName=QFileDialog::getOpenFileName(this,tr("选择文件"),QCoreApplication::applicationDirPath(),filter);
if(!fileName.isEmpty())
{
returnfileName;
}
else
{
return"";
}
}
QStringListfrmmain::getFileNames(QStringfilter)
{
QStringListfileNames;
fileNames=QFileDialog::getOpenFileNames(this,tr("选择文件"),QCoreApplication::applicationDirPath(),filter);
if(!fileNames.isEmpty())
{
returnfileNames;
}
else
{
returnfileNames;
}
}
voidfrmmain::on_btn1_clicked()
{
ui->pic->setText(this->getFileName(tr("图片文件(*.jpg)")));
}
voidfrmmain::on_btn2_clicked()
{
ui->txt->setText(this->getFileName(tr("文本文件(*.txt)")));
}
voidfrmmain::on_btnPicToData_clicked()
{
if(ui->pic->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择图片文件"));
return;
}
if(ui->txt->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择文本文件"));
return;
}
if(ui->rbtn16->isChecked())
{
this->picToData(ui->pic->text(),ui->txt->text(),"Hex");
}
else
{
this->picToData(ui->pic->text(),ui->txt->text(),"Base64");
}
}
voidfrmmain::on_btnDataToPic_clicked()
{
if(ui->pic->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择图片文件"));
return;
}
if(ui->txt->text()=="")
{
QMessageBox::information(this,tr("提示"),tr("请选择文本文件"));
return;
}
if(ui->rbtn16->isChecked())
{
this->dataToPic(ui->txt->text(),ui->pic->text(),"Hex");
}
else
{
this->dataToPic(ui->txt->text(),ui->pic->text(),"Base64");
}
}
voidfrmmain::on_btnSelectFile_clicked()
{
ui->listWidget->addItems(this->getFileNames(tr("图片文件(*.jpg)")));
}
voidfrmmain::delayTime(ints)
{
QTimet=QTime::currentTime().addMSecs(s);
while(QTime::currentTime()<t)
{
QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
}
voidfrmmain::on_btnSelectTxt_clicked()
{
ui->listWidget->addItems(this->getFileNames(tr("文本文件(*.txt)")));
}
voidfrmmain::on_btnChangeToTxt_clicked()
{
QListWidgetItem*myitem;
if(ui->listWidget->count()==0)
{
return;
}
for(inti=0;i<ui->listWidget->count();i++)
{
QStringtimeNow=QTime::currentTime().toString("hhmmss");
QStringdateNow=QDate::currentDate().toString("yyyyMMdd");
QStringsaveFileName=QCoreApplication::applicationDirPath()+tr("/imagedata/%1%2.txt").arg(dateNow,timeNow);
myitem=ui->listWidget->item(i);
if(ui->rbtn16->isChecked())
{
this->picToData(myitem->text(),saveFileName,"Hex");
}
else
{
this->picToData(myitem->text(),saveFileName,"Base64");
}
this->delayTime(1000);//为了确保命名不冲突和转换完成,延时1秒
}
QMessageBox::information(this,tr("提示"),tr("恭喜你!转换完成!"));
}
voidfrmmain::on_btnChangeToJpg_clicked()
{
QListWidgetItem*myitem;
if(ui->listWidget->count()==0)
{
return;
}
for(inti=0;i<ui->listWidget->count();i++)
{
QStringtimeNow=QTime::currentTime().toString("hhmmss");
QStringdateNow=QDate::currentDate().toString("yyyyMMdd");
QStringsaveFileName=QCoreApplication::applicationDirPath()+tr("/imageto/%1%2.jpg").arg(dateNow,timeNow);
myitem=ui->listWidget->item(i);
if(ui->rbtn16->isChecked())
{
this->dataToPic(myitem->text(),saveFileName,"Hex");
}
else
{
this->dataToPic(myitem->text(),saveFileName,"Base64");
}
this->delayTime(1000);//为了确保命名不冲突和转换完成,延时1秒
}
QMessageBox::information(this,tr("提示"),tr("恭喜你!转换完成!"));
}
还有不完善的地方,欢迎提出意见!
相关文章推荐
- QT编写图片数据转换工具
- QT编写cmd工具
- Qtpfsgui:HDR 图片处置惩罚工具
- 用qt代码怎样编写图片保存格式[qt4.6]
- Qt程序国际化工具使用和相关代码编写规范
- 一个Qt OpenGl编写的图片晃动效果
- Qt利用QGraphicsScene编写Word排版工具导出PDF
- 用QT编写tcpsocket测试工具时的注意点
- [原创]c#编写-获取Infopath数据中的图片工具
- QT编写简易截图工具
- Qt编写跨平台GIS出图工具之准备
- qt之图片转换工具
- Linux下QT图形界面开发 用快速开发工具Qt Designer编写Qt程序(2)
- QT编写的数据转曲线工具
- Qt开发辅助工具——QSS Editor,编写qss实时预览
- 动感网页相册 python编写简单文件夹内图片浏览工具
- Qt开发小工具之gif转换器(使用QMovie截取每一帧为QImage,然后用QFile另存为图片文件)
- 用qt代码怎样编写图片保存格式[qt4.6]
- 编写了一个提取图片中路径坐标的工具----初学VC++2005
- GeoCon 用C#编写的开源的地理信息数据转换工具