166 lines
4.9 KiB
C++
166 lines
4.9 KiB
C++
|
#include "dialog_exportimagefile.h"
|
|||
|
#include "ui_dialog_exportimagefile.h"
|
|||
|
#include "imgfmt/HGImgFmt.h"
|
|||
|
#include "HGUIGlobal.h"
|
|||
|
#include "../../utility/HGString.h"
|
|||
|
|
|||
|
Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destPath, const QString &destName, const QString &destExt,
|
|||
|
bool isSaveAsMulti, int saveQuality, const QStringList &srcFiles, QWidget *parent)
|
|||
|
: QDialog(parent)
|
|||
|
, ui(new Ui::Dialog_ExportImageFile)
|
|||
|
, m_destPath(destPath)
|
|||
|
, m_destName(destName)
|
|||
|
, m_destExt(destExt)
|
|||
|
, m_isSaveAsMulti(isSaveAsMulti)
|
|||
|
, m_saveQuality(saveQuality)
|
|||
|
, m_srcFiles(srcFiles)
|
|||
|
{
|
|||
|
ui->setupUi(this);
|
|||
|
|
|||
|
ui->progressBar->setMinimum(0);
|
|||
|
ui->progressBar->setMaximum(srcFiles.size());
|
|||
|
ui->progressBar->setValue(0);
|
|||
|
|
|||
|
connect(this, SIGNAL(updateProgress(int)), this, SLOT(on_updateProgress(int)), Qt::QueuedConnection);
|
|||
|
connect(this, SIGNAL(finish()), this, SLOT(on_finish()), Qt::QueuedConnection);
|
|||
|
|
|||
|
m_stopThread = false;
|
|||
|
HGBase_OpenThread(ThreadFunc, this, &m_thread);
|
|||
|
}
|
|||
|
|
|||
|
Dialog_ExportImageFile::~Dialog_ExportImageFile()
|
|||
|
{
|
|||
|
if (nullptr != m_thread)
|
|||
|
{
|
|||
|
HGBase_CloseThread(m_thread);
|
|||
|
m_thread = nullptr;
|
|||
|
}
|
|||
|
|
|||
|
delete ui;
|
|||
|
}
|
|||
|
|
|||
|
void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
|
|||
|
{
|
|||
|
(void)thread;
|
|||
|
Dialog_ExportImageFile *p = (Dialog_ExportImageFile *)param;
|
|||
|
|
|||
|
if (p->m_isSaveAsMulti)
|
|||
|
{
|
|||
|
QString fileName = p->m_destPath + p->m_destName + p->m_destExt;
|
|||
|
|
|||
|
HGImgFmtWriter imgFmtWriter = nullptr;
|
|||
|
HGImgFmt_OpenImageWriter(getStdString(fileName).c_str(), 0, &imgFmtWriter);
|
|||
|
if (nullptr != imgFmtWriter)
|
|||
|
{
|
|||
|
for (int i = 0; i < p->m_srcFiles.size(); ++i)
|
|||
|
{
|
|||
|
if (p->m_stopThread)
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
emit p->updateProgress(i);
|
|||
|
|
|||
|
HGImgFmtReader imgFmtReader = nullptr;
|
|||
|
HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
|
|||
|
if (nullptr != imgFmtReader)
|
|||
|
{
|
|||
|
HGUInt count = 0;
|
|||
|
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
|
|||
|
for (HGUInt j = 0; j < count; ++j)
|
|||
|
{
|
|||
|
if (p->m_stopThread)
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
HGImage img = nullptr;
|
|||
|
HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
|
|||
|
if (nullptr != img)
|
|||
|
{
|
|||
|
HGImgFmt_SaveImageToWriter(imgFmtWriter, img, nullptr, (HGUInt)p->m_saveQuality);
|
|||
|
HGBase_DestroyImage(img);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HGImgFmt_CloseImageReader(imgFmtReader);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HGImgFmt_CloseImageWriter(imgFmtWriter);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
int index = 1;
|
|||
|
|
|||
|
for (int i = 0; i < p->m_srcFiles.size(); ++i)
|
|||
|
{
|
|||
|
if (p->m_stopThread)
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
emit p->updateProgress(i);
|
|||
|
|
|||
|
HGImgFmtReader imgFmtReader = nullptr;
|
|||
|
HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
|
|||
|
if (nullptr != imgFmtReader)
|
|||
|
{
|
|||
|
HGUInt count = 0;
|
|||
|
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
|
|||
|
for (HGUInt j = 0; j < count; ++j)
|
|||
|
{
|
|||
|
if (p->m_stopThread)
|
|||
|
{
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
HGImage img = nullptr;
|
|||
|
HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
|
|||
|
if (nullptr != img)
|
|||
|
{
|
|||
|
char fileName[512];
|
|||
|
sprintf(fileName, "%s%03d", getStdString(p->m_destName).c_str(), index);
|
|||
|
++index;
|
|||
|
|
|||
|
QString saveFileName = p->m_destPath + QString(StdStringToUtf8(fileName).c_str()) + p->m_destExt;
|
|||
|
|
|||
|
HGImgFmt_SaveImage(img, 0, nullptr, (HGUInt)p->m_saveQuality, getStdString(saveFileName).c_str());
|
|||
|
HGBase_DestroyImage(img);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HGImgFmt_CloseImageReader(imgFmtReader);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
emit p->finish();
|
|||
|
}
|
|||
|
|
|||
|
void Dialog_ExportImageFile::on_updateProgress(int value)
|
|||
|
{
|
|||
|
ui->progressBar->setValue(value);
|
|||
|
}
|
|||
|
|
|||
|
void Dialog_ExportImageFile::on_finish()
|
|||
|
{
|
|||
|
close();
|
|||
|
}
|
|||
|
|
|||
|
void Dialog_ExportImageFile::on_pushButton_clicked()
|
|||
|
{
|
|||
|
m_stopThread = true;
|
|||
|
HGBase_CloseThread(m_thread);
|
|||
|
m_thread = nullptr;
|
|||
|
}
|
|||
|
|
|||
|
void Dialog_ExportImageFile::closeEvent(QCloseEvent *e)
|
|||
|
{
|
|||
|
(void)e;
|
|||
|
m_stopThread = true;
|
|||
|
HGBase_CloseThread(m_thread);
|
|||
|
m_thread = nullptr;
|
|||
|
}
|