您的位置:首页 > 编程语言 > Qt开发

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);
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("恭喜你!转换完成!"));

}

还有不完善的地方,欢迎提出意见!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: