HGGitLab

Commit aaf5aea2 authored by luoliangyi's avatar luoliangyi

解决导出时不能多张导出的问题

parent bfca5cb4
This diff is collapsed.
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>443</width> <width>442</width>
<height>360</height> <height>360</height>
</rect> </rect>
</property> </property>
......
...@@ -43,6 +43,8 @@ Dialog_Export::Dialog_Export(int total, const std::vector<int> &selectedIndexs, ...@@ -43,6 +43,8 @@ Dialog_Export::Dialog_Export(int total, const std::vector<int> &selectedIndexs,
m_saveQuality = getCfgValue("export", "quality", 0); m_saveQuality = getCfgValue("export", "quality", 0);
m_suffix = getCfgValue("export", "suffix", 0); m_suffix = getCfgValue("export", "suffix", 0);
ui->fileDialog->selectNameFilter(ui->fileDialog->nameFilters().at(m_suffix)); ui->fileDialog->selectNameFilter(ui->fileDialog->nameFilters().at(m_suffix));
ui->check_saveAsMulti->setEnabled(m_suffix > 2);
ui->check_saveAsMulti->setChecked(getCfgValue("export", "saveAsMulti", false));
int exportType = getCfgValue("export", "exportType", 0); int exportType = getCfgValue("export", "exportType", 0);
if (0 == exportType) if (0 == exportType)
...@@ -79,11 +81,26 @@ QString Dialog_Export::getSavePath() ...@@ -79,11 +81,26 @@ QString Dialog_Export::getSavePath()
return m_savePath; return m_savePath;
} }
QString Dialog_Export::getSaveName()
{
return m_saveName;
}
QString Dialog_Export::getSaveExt()
{
return m_saveExt;
}
int Dialog_Export::getSaveQuality() int Dialog_Export::getSaveQuality()
{ {
return m_saveQuality; return m_saveQuality;
} }
bool Dialog_Export::isSaveAsMultiPage()
{
return ui->check_saveAsMulti->isChecked();
}
void Dialog_Export::getSaveIndexs(std::vector<int> &indexs) void Dialog_Export::getSaveIndexs(std::vector<int> &indexs)
{ {
indexs = m_saveIndexs; indexs = m_saveIndexs;
...@@ -126,7 +143,9 @@ void Dialog_Export::on_dialog_accepted() ...@@ -126,7 +143,9 @@ void Dialog_Export::on_dialog_accepted()
if (-1 != pos) if (-1 != pos)
name = name.left(pos); name = name.left(pos);
m_savePath = getStdFileName(path + name + extName); m_savePath = getStdFileName(path);
m_saveName = name;
m_saveExt = extName;
} }
makeSaveIndexs(); makeSaveIndexs();
...@@ -142,6 +161,7 @@ void Dialog_Export::on_dialog_accepted() ...@@ -142,6 +161,7 @@ void Dialog_Export::on_dialog_accepted()
else if (ui->radio_nominatedPages->isChecked()) else if (ui->radio_nominatedPages->isChecked())
exportType = 2; exportType = 2;
saveCfgValue("export", "exportType", exportType); saveCfgValue("export", "exportType", exportType);
saveCfgValue("export", "saveAsMulti", ui->check_saveAsMulti->isChecked());
accept(); accept();
} }
...@@ -149,6 +169,9 @@ void Dialog_Export::on_dialog_accepted() ...@@ -149,6 +169,9 @@ void Dialog_Export::on_dialog_accepted()
void Dialog_Export::on_filterSelected(const QString& filterName) void Dialog_Export::on_filterSelected(const QString& filterName)
{ {
m_suffix = ui->fileDialog->nameFilters().indexOf(filterName); m_suffix = ui->fileDialog->nameFilters().indexOf(filterName);
ui->check_saveAsMulti->setEnabled(m_suffix > 2);
if (m_suffix <= 2)
ui->check_saveAsMulti->setChecked(false);
} }
void Dialog_Export::on_btn_option_clicked() void Dialog_Export::on_btn_option_clicked()
......
...@@ -16,7 +16,10 @@ public: ...@@ -16,7 +16,10 @@ public:
~Dialog_Export(); ~Dialog_Export();
QString getSavePath(); QString getSavePath();
QString getSaveName();
QString getSaveExt();
int getSaveQuality(); int getSaveQuality();
bool isSaveAsMultiPage();
void getSaveIndexs(std::vector<int> &indexs); void getSaveIndexs(std::vector<int> &indexs);
private slots: private slots:
...@@ -36,6 +39,8 @@ private: ...@@ -36,6 +39,8 @@ private:
std::vector<int> m_selectedIndexs; std::vector<int> m_selectedIndexs;
QString m_savePath; QString m_savePath;
QString m_saveName;
QString m_saveExt;
int m_saveQuality; int m_saveQuality;
std::vector<int> m_saveIndexs; std::vector<int> m_saveIndexs;
int m_suffix; int m_suffix;
......
...@@ -114,6 +114,13 @@ Page range will be &quot;Chosen Pages&quot;.</string> ...@@ -114,6 +114,13 @@ Page range will be &quot;Chosen Pages&quot;.</string>
</item> </item>
</layout> </layout>
</item> </item>
<item>
<widget class="QCheckBox" name="check_saveAsMulti">
<property name="text">
<string>Save as multipages (TIFF/PDF/OFD)</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
......
...@@ -3,10 +3,14 @@ ...@@ -3,10 +3,14 @@
#include "imgfmt/HGImgFmt.h" #include "imgfmt/HGImgFmt.h"
#include "HGUIGlobal.h" #include "HGUIGlobal.h"
Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destFile, int saveQuality, const QStringList &srcFiles, QWidget *parent) : Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destPath, const QString &destName, const QString &destExt,
QDialog(parent) bool isSaveAsMulti, int saveQuality, const QStringList &srcFiles, QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog_ExportImageFile) , ui(new Ui::Dialog_ExportImageFile)
, m_destFile(destFile) , m_destPath(destPath)
, m_destName(destName)
, m_destExt(destExt)
, m_isSaveAsMulti(isSaveAsMulti)
, m_saveQuality(saveQuality) , m_saveQuality(saveQuality)
, m_srcFiles(srcFiles) , m_srcFiles(srcFiles)
{ {
...@@ -39,10 +43,56 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param) ...@@ -39,10 +43,56 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
(void)thread; (void)thread;
Dialog_ExportImageFile *p = (Dialog_ExportImageFile *)param; Dialog_ExportImageFile *p = (Dialog_ExportImageFile *)param;
HGImgFmtWriter imgFmtWriter = nullptr; if (p->m_isSaveAsMulti)
HGImgFmt_OpenImageWriter(getStdString(p->m_destFile).c_str(), 0, &imgFmtWriter);
if (nullptr != imgFmtWriter)
{ {
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) for (int i = 0; i < p->m_srcFiles.size(); ++i)
{ {
if (p->m_stopThread) if (p->m_stopThread)
...@@ -69,7 +119,13 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param) ...@@ -69,7 +119,13 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img); HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (nullptr != img) if (nullptr != img)
{ {
HGImgFmt_SaveImageToWriter(imgFmtWriter, img, nullptr, (HGUInt)p->m_saveQuality); 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); HGBase_DestroyImage(img);
} }
} }
...@@ -77,8 +133,6 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param) ...@@ -77,8 +133,6 @@ void Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
HGImgFmt_CloseImageReader(imgFmtReader); HGImgFmt_CloseImageReader(imgFmtReader);
} }
} }
HGImgFmt_CloseImageWriter(imgFmtWriter);
} }
emit p->finish(); emit p->finish();
......
...@@ -13,7 +13,8 @@ class Dialog_ExportImageFile : public QDialog ...@@ -13,7 +13,8 @@ class Dialog_ExportImageFile : public QDialog
Q_OBJECT Q_OBJECT
public: public:
explicit Dialog_ExportImageFile(const QString &destFile, int saveQuality, const QStringList &srcFiles, QWidget *parent = nullptr); explicit Dialog_ExportImageFile(const QString &destPath, const QString &destName, const QString &destExt,
bool isSaveAsMulti, int saveQuality, const QStringList &srcFiles, QWidget *parent = nullptr);
~Dialog_ExportImageFile(); ~Dialog_ExportImageFile();
private: private:
...@@ -34,7 +35,10 @@ protected: ...@@ -34,7 +35,10 @@ protected:
private: private:
Ui::Dialog_ExportImageFile *ui; Ui::Dialog_ExportImageFile *ui;
QString m_destFile; QString m_destPath;
QString m_destName;
QString m_destExt;
bool m_isSaveAsMulti;
int m_saveQuality; int m_saveQuality;
QStringList m_srcFiles; QStringList m_srcFiles;
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>252</width> <width>262</width>
<height>149</height> <height>97</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>70</x> <x>80</x>
<y>100</y> <y>50</y>
<width>171</width> <width>171</width>
<height>32</height> <height>32</height>
</rect> </rect>
...@@ -29,13 +29,13 @@ ...@@ -29,13 +29,13 @@
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property> </property>
</widget> </widget>
<widget class="QWidget" name=""> <widget class="QWidget" name="layoutWidget">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>20</x>
<y>50</y> <y>20</y>
<width>231</width> <width>231</width>
<height>21</height> <height>22</height>
</rect> </rect>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
...@@ -47,7 +47,14 @@ ...@@ -47,7 +47,14 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox"/> <widget class="QSpinBox" name="spinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
......
...@@ -7,8 +7,6 @@ Dialog_SaveQuality::Dialog_SaveQuality(int quality, QWidget *parent) : ...@@ -7,8 +7,6 @@ Dialog_SaveQuality::Dialog_SaveQuality(int quality, QWidget *parent) :
ui(new Ui::Dialog_SaveQuality) ui(new Ui::Dialog_SaveQuality)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->spinBox->setFixedWidth(180);
ui->spinBox->setValue(quality); ui->spinBox->setValue(quality);
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("ok")); ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("ok"));
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>397</width> <width>326</width>
<height>252</height> <height>105</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
...@@ -18,6 +18,12 @@ ...@@ -18,6 +18,12 @@
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QSlider" name="horizontalSlider"> <widget class="QSlider" name="horizontalSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum"> <property name="maximum">
<number>100</number> <number>100</number>
</property> </property>
...@@ -28,6 +34,12 @@ ...@@ -28,6 +34,12 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox"> <widget class="QSpinBox" name="spinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum"> <property name="maximum">
<number>100</number> <number>100</number>
</property> </property>
......
...@@ -1573,45 +1573,27 @@ void MainWindow::on_act_Export_triggered() ...@@ -1573,45 +1573,27 @@ void MainWindow::on_act_Export_triggered()
Dialog_Export dlg(count, selectIndexs, this); Dialog_Export dlg(count, selectIndexs, this);
if (dlg.exec()) if (dlg.exec())
{ {
QString savePath = dlg.getSavePath(); QStringList srcFiles;
bool find = false; std::vector<int> saveIndexs;
for (int i = 0; i < count; ++i) dlg.getSaveIndexs(saveIndexs);
for (size_t i = 0; i < saveIndexs.size(); ++i)
{ {
QString fileName; QString fileName;
m_thumb->getItemFileName(i, fileName); m_thumb->getItemFileName(saveIndexs[i], fileName);
assert(!fileName.isEmpty()); srcFiles.append(fileName);
if (fileName == savePath)
{
find = true;
break;
}
} }
if (!find) if (!srcFiles.isEmpty())
{ {
QStringList srcFiles; QString savePath = dlg.getSavePath();
QString saveName = dlg.getSaveName();
std::vector<int> saveIndexs; QString saveExt = dlg.getSaveExt();
dlg.getSaveIndexs(saveIndexs); bool isSaveAsMulti = dlg.isSaveAsMultiPage();
for (size_t i = 0; i < saveIndexs.size(); ++i) int saveQuality = dlg.getSaveQuality();
{
QString fileName;
m_thumb->getItemFileName(saveIndexs[i], fileName);
srcFiles.append(fileName);
}
if (!srcFiles.isEmpty()) Dialog_ExportImageFile dlgExport(savePath, saveName, saveExt, isSaveAsMulti, saveQuality, srcFiles, this);
{ dlgExport.exec();
int saveQuality = dlg.getSaveQuality();
Dialog_ExportImageFile dlgExport(savePath, saveQuality, srcFiles, this);
dlgExport.exec();
}
}
else
{
QMessageBox::information(this, tr("info"), tr("find savePath in thumbnail"));
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment