scantool:将配置保存到数据库

This commit is contained in:
luoliangyi 2024-04-30 17:16:13 +08:00
parent 36c29a56d5
commit dfd4e2e565
11 changed files with 565 additions and 282 deletions

View File

@ -1,20 +0,0 @@
#include "HGUIGlobal.h"
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
QString getStdFileName(const QString &fileName)
{
char result[512] = {0};
HGBase_StandardiseFileName(fileName.toStdString().c_str(), result, 512);
return result;
}
std::string getStdString(const QString &str)
{
#ifdef HG_CMP_MSC
return str.toLocal8Bit().data();
#else
return str.toStdString();
#endif
}

View File

@ -1,10 +0,0 @@
#ifndef __HGUIGLOBAL_H__
#define __HGUIGLOBAL_H__
#include <QString>
QString getStdFileName(const QString &fileName);
std::string getStdString(const QString &str);
#endif /* __HGUIGLOBAL_H__ */

View File

@ -1,70 +0,0 @@
#include "app_cfg.h"
#include "base/HGDef.h"
#include "base/HGInc.h"
#include "base/HGUtility.h"
#include "base/HGIni.h"
#include "HGUIGlobal.h"
#include "HGString.h"
QString getCfgValue(const char *appName, const char *key, const QString &def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGChar value[512] = {0};
HGBase_GetProfileString(cfgPath, appName, key, getStdString(def).c_str(), value, 512);
return StdStringToUtf8(value).c_str();
}
int getCfgValue(const char *appName, const char *key, int def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGInt value = 0;
HGBase_GetProfileInt(cfgPath, appName, key, def, &value);
return value;
}
bool getCfgValue(const char *appName, const char *key, bool def)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
strcat(cfgPath, "config.ini");
HGInt value = 0;
HGBase_GetProfileInt(cfgPath, appName, key, (HGInt)def, &value);
return (bool)value;
}
void saveCfgValue(const char *appName, const char *key, const QString &value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileString(cfgPath, appName, key, getStdString(value).c_str());
}
void saveCfgValue(const char *appName, const char *key, int value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileInt(cfgPath, appName, key, value);
}
void saveCfgValue(const char *appName, const char *key, bool value)
{
HGChar cfgPath[512];
HGBase_GetConfigPath(cfgPath, 512);
HGBase_CreateDir(cfgPath);
strcat(cfgPath, "config.ini");
HGBase_SetProfileInt(cfgPath, appName, key, (HGInt)value);
}

View File

@ -1,14 +0,0 @@
#ifndef __APP_CFG_H__
#define __APP_CFG_H__
#include <QString>
QString getCfgValue(const char *appName, const char *key, const QString &def);
int getCfgValue(const char *appName, const char *key, int def);
bool getCfgValue(const char *appName, const char *key, bool def);
void saveCfgValue(const char *appName, const char *key, const QString &value);
void saveCfgValue(const char *appName, const char *key, int value);
void saveCfgValue(const char *appName, const char *key, bool value);
#endif /* __APP_CFG_H__ */

View File

@ -1,6 +1,5 @@
#include "dialog_writesettings.h" #include "dialog_writesettings.h"
#include "ui_dialog_writesettings.h" #include "ui_dialog_writesettings.h"
#include "app_cfg.h"
Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, const WriteParam &writeParam, QWidget *parent) Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, const WriteParam &writeParam, QWidget *parent)
: QDialog(parent) : QDialog(parent)
@ -24,11 +23,11 @@ Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, const WriteParam &wr
ui->spin_jpg_quality->setVisible(jpg_enable); ui->spin_jpg_quality->setVisible(jpg_enable);
//set value //set value
ui->slider_jpg_quality->setValue(writeParam.m_jpegQuality); ui->slider_jpg_quality->setValue(writeParam.jpegQuality);
ui->spin_jpg_quality->setValue(writeParam.m_jpegQuality); ui->spin_jpg_quality->setValue(writeParam.jpegQuality);
ui->cbox_tif_bw->setCurrentIndex(writeParam.m_tiffCompressionBW); ui->cbox_tif_bw->setCurrentIndex(writeParam.tiffCompressionBW);
ui->cbox_tif_color->setCurrentIndex(writeParam.m_tiffCompression); ui->cbox_tif_color->setCurrentIndex(writeParam.tiffCompression);
ui->spin_tif_quality->setValue(writeParam.m_tiffQuality); ui->spin_tif_quality->setValue(writeParam.tiffQuality);
//set enable //set enable
ui->spin_tif_quality->setEnabled(ui->cbox_tif_color->currentIndex() == 2); ui->spin_tif_quality->setEnabled(ui->cbox_tif_color->currentIndex() == 2);
@ -44,10 +43,10 @@ Dialog_WriteSettings::~Dialog_WriteSettings()
WriteParam Dialog_WriteSettings::GetWriteParam() WriteParam Dialog_WriteSettings::GetWriteParam()
{ {
WriteParam writeParam; WriteParam writeParam;
writeParam.m_jpegQuality = ui->spin_jpg_quality->value(); writeParam.jpegQuality = ui->spin_jpg_quality->value();
writeParam.m_tiffCompressionBW = ui->cbox_tif_bw->currentIndex(); writeParam.tiffCompressionBW = ui->cbox_tif_bw->currentIndex();
writeParam.m_tiffCompression = ui->cbox_tif_color->currentIndex(); writeParam.tiffCompression = ui->cbox_tif_color->currentIndex();
writeParam.m_tiffQuality = ui->spin_tif_quality->value(); writeParam.tiffQuality = ui->spin_tif_quality->value();
return writeParam; return writeParam;
} }

View File

@ -10,10 +10,10 @@ class Dialog_WriteSettings;
struct WriteParam struct WriteParam
{ {
int m_jpegQuality; int jpegQuality;
int m_tiffCompressionBW; int tiffCompressionBW;
int m_tiffCompression; int tiffCompression;
int m_tiffQuality; int tiffQuality;
}; };
class Dialog_WriteSettings : public QDialog class Dialog_WriteSettings : public QDialog

View File

@ -5,9 +5,6 @@
#include "base/HGInc.h" #include "base/HGInc.h"
#include "base/HGUtility.h" #include "base/HGUtility.h"
#include "base/HGIni.h" #include "base/HGIni.h"
#include "HGUIGlobal.h"
#include "HGString.h"
#include "app_cfg.h"
Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent) Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
: QWidget(parent) : QWidget(parent)
@ -18,21 +15,21 @@ Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
QRegExp rx("[^\\\\/:*?\"<>|]+$"); QRegExp rx("[^\\\\/:*?\"<>|]+$");
ui->lineEdit_fileName->setValidator(new QRegExpValidator(rx, this)); ui->lineEdit_fileName->setValidator(new QRegExpValidator(rx, this));
ui->lineEdit_directory->setText(saveParam.m_savePath); ui->lineEdit_directory->setText(QString::fromLocal8Bit(saveParam.savePath.c_str()));
ui->cbtn_subFolder->setChecked(saveParam.m_isUseSubfolderByTime); ui->cbtn_subFolder->setChecked(saveParam.isUseSubfolderByTime);
ui->cbtn_subFolderByBlank->setChecked(saveParam.m_isUseSubfolderByBlankPages); ui->cbtn_subFolderByBlank->setChecked(saveParam.isUseSubfolderByBlankPages);
ui->cbtn_subFolderByColor->setChecked(saveParam.m_isUseSubfolderByColor); ui->cbtn_subFolderByColor->setChecked(saveParam.isUseSubfolderByColor);
ui->lineEdit_fileName->setText(saveParam.m_fileNamePrefix); ui->lineEdit_fileName->setText(QString::fromLocal8Bit(saveParam.fileNamePrefix.c_str()));
ui->spin_index->setValue(saveParam.m_fileNameStartIndex); ui->spin_index->setValue(saveParam.fileNameStartIndex);
ui->cbox_digit->setCurrentIndex(saveParam.m_fileNameDigits - 1); ui->cbox_digit->setCurrentIndex(saveParam.fileNameDigits - 1);
ui->cbox_evenOdd->setCurrentIndex(saveParam.m_fileNameOddEventType); ui->cbox_evenOdd->setCurrentIndex(saveParam.fileNameOddEvenType);
int format = getFormatIndex(saveParam.m_fileNameExt, saveParam.m_isOcr); int format = getFormatIndex(saveParam.fileNameExt, saveParam.isOcr);
ui->cbox_format->setCurrentIndex(format); ui->cbox_format->setCurrentIndex(format);
ui->cbtn_multiFile->setChecked(saveParam.m_isSaveAsMultiPage); ui->cbtn_multiFile->setChecked(saveParam.isSaveAsMultiPage);
ui->radio_multiAll->setChecked(0 == saveParam.m_multiPagesType); ui->radio_multiAll->setChecked(0 == saveParam.multiPagesType);
ui->radio_multiCustom->setChecked(0 != saveParam.m_multiPagesType); ui->radio_multiCustom->setChecked(0 != saveParam.multiPagesType);
ui->spinBox_multiPages->setValue(saveParam.m_customMultiPages); ui->spinBox_multiPages->setValue(saveParam.customMultiPages);
ui->lab_digitExp->setText(QString(tr("e.g. '%1%2'")).arg(ui->lineEdit_fileName->text()) ui->lab_digitExp->setText(QString(tr("e.g. '%1%2'")).arg(ui->lineEdit_fileName->text())
.arg(ui->spin_index->value(), ui->cbox_digit->currentIndex() + 1, 10, QLatin1Char('0'))); .arg(ui->spin_index->value(), ui->cbox_digit->currentIndex() + 1, 10, QLatin1Char('0')));
@ -51,10 +48,10 @@ Form_SaveParam::Form_SaveParam(const SaveParam &saveParam, QWidget *parent)
ui->cbox_format->removeItem(10); ui->cbox_format->removeItem(10);
#endif #endif
m_writeParam.m_jpegQuality = saveParam.m_jpegQuality; m_writeParam.jpegQuality = saveParam.jpegQuality;
m_writeParam.m_tiffCompressionBW = saveParam.m_tiffCompressionBW; m_writeParam.tiffCompressionBW = saveParam.tiffCompressionBW;
m_writeParam.m_tiffCompression = saveParam.m_tiffCompression; m_writeParam.tiffCompression = saveParam.tiffCompression;
m_writeParam.m_tiffQuality = saveParam.m_tiffQuality; m_writeParam.tiffQuality = saveParam.tiffQuality;
} }
Form_SaveParam::~Form_SaveParam() Form_SaveParam::~Form_SaveParam()
@ -65,20 +62,20 @@ Form_SaveParam::~Form_SaveParam()
SaveParam Form_SaveParam::GetSaveParam() SaveParam Form_SaveParam::GetSaveParam()
{ {
SaveParam saveParam; SaveParam saveParam;
saveParam.m_savePath = ui->lineEdit_directory->text(); saveParam.savePath = ui->lineEdit_directory->text().toLocal8Bit().toStdString();
saveParam.m_isUseSubfolderByTime = ui->cbtn_subFolder->isChecked(); saveParam.isUseSubfolderByTime = ui->cbtn_subFolder->isChecked();
saveParam.m_isUseSubfolderByBlankPages = ui->cbtn_subFolderByBlank->isChecked(); saveParam.isUseSubfolderByBlankPages = ui->cbtn_subFolderByBlank->isChecked();
saveParam.m_isUseSubfolderByColor = ui->cbtn_subFolderByColor->isChecked(); saveParam.isUseSubfolderByColor = ui->cbtn_subFolderByColor->isChecked();
saveParam.m_jpegQuality = m_writeParam.m_jpegQuality; saveParam.jpegQuality = m_writeParam.jpegQuality;
saveParam.m_tiffCompressionBW = m_writeParam.m_tiffCompressionBW; saveParam.tiffCompressionBW = m_writeParam.tiffCompressionBW;
saveParam.m_tiffCompression = m_writeParam.m_tiffCompression; saveParam.tiffCompression = m_writeParam.tiffCompression;
saveParam.m_tiffQuality = m_writeParam.m_tiffQuality; saveParam.tiffQuality = m_writeParam.tiffQuality;
saveParam.m_fileNamePrefix = ui->lineEdit_fileName->text(); saveParam.fileNamePrefix = ui->lineEdit_fileName->text().toLocal8Bit().toStdString();
saveParam.m_fileNameStartIndex = ui->spin_index->value(); saveParam.fileNameStartIndex = ui->spin_index->value();
saveParam.m_fileNameDigits = ui->cbox_digit->currentIndex() + 1; saveParam.fileNameDigits = ui->cbox_digit->currentIndex() + 1;
saveParam.m_fileNameOddEventType = ui->cbox_evenOdd->currentIndex(); saveParam.fileNameOddEvenType = ui->cbox_evenOdd->currentIndex();
QString format = "jpg"; std::string format = "jpg";
switch (ui->cbox_format->currentIndex()) switch (ui->cbox_format->currentIndex())
{ {
case 1: case 1:
@ -117,12 +114,12 @@ SaveParam Form_SaveParam::GetSaveParam()
default: default:
break; break;
} }
saveParam.m_fileNameExt = format; saveParam.fileNameExt = format;
saveParam.m_isOcr = (ui->cbox_format->currentIndex() >= 10); saveParam.isOcr = (ui->cbox_format->currentIndex() >= 10);
saveParam.m_isSaveAsMultiPage = ui->cbtn_multiFile->isChecked(); saveParam.isSaveAsMultiPage = ui->cbtn_multiFile->isChecked();
saveParam.m_multiPagesType = (ui->radio_multiAll->isChecked()) ? 0 : 1; saveParam.multiPagesType = (ui->radio_multiAll->isChecked()) ? 0 : 1;
saveParam.m_customMultiPages = ui->spinBox_multiPages->value(); saveParam.customMultiPages = ui->spinBox_multiPages->value();
return saveParam; return saveParam;
} }
@ -134,50 +131,53 @@ SaveParam Form_SaveParam::GetDefSaveParam()
HGChar procName[512]; HGChar procName[512];
HGBase_GetProcessName(procName, 512); HGBase_GetProcessName(procName, 512);
strcat(aquireIntoPath, procName); strcat(aquireIntoPath, procName);
strcat(aquireIntoPath, "/AquireInto/"); #if defined(HG_CMP_MSC)
QString filePath = getStdFileName(StdStringToUtf8(aquireIntoPath).c_str()); strcat(aquireIntoPath, "\\AquireInto\\");
SaveParam saveParam;
saveParam.m_savePath = filePath;
saveParam.m_isUseSubfolderByTime = false;
saveParam.m_isUseSubfolderByBlankPages = false;
saveParam.m_isUseSubfolderByColor = false;
saveParam.m_jpegQuality = 80;
saveParam.m_tiffCompressionBW = 1;
saveParam.m_tiffCompression = 1;
saveParam.m_tiffQuality = 80;
#if defined(OEM_HANWANG)
saveParam.m_fileNamePrefix = QString("HWScan");
#elif defined(OEM_LISICHENG)
saveParam.m_fileNamePrefix = QString("LXScan");
#elif defined(OEM_CANGTIAN)
saveParam.m_fileNamePrefix = QString("CTSScan");
#elif defined(OEM_ZHONGJING)
saveParam.m_fileNamePrefix = QString("ZJScan");
#elif defined(OEM_ZIGUANG)
saveParam.m_fileNamePrefix = QString("ZGScan");
#elif defined(OEM_NEUTRAL)
saveParam.m_fileNamePrefix = QString("Scan");
#elif defined(OEM_DELI)
saveParam.m_fileNamePrefix = QString("DLScan");
#else #else
saveParam.m_fileNamePrefix = QString("HGScan"); strcat(aquireIntoPath, "/AquireInto/");
#endif #endif
saveParam.m_fileNameStartIndex = 1; SaveParam saveParam;
saveParam.m_fileNameDigits = 3; saveParam.savePath = aquireIntoPath;
saveParam.m_fileNameOddEventType = 0; saveParam.isUseSubfolderByTime = false;
saveParam.m_fileNameExt = QString("jpg"); saveParam.isUseSubfolderByBlankPages = false;
saveParam.m_isOcr = false; saveParam.isUseSubfolderByColor = false;
saveParam.m_isSaveAsMultiPage = false; saveParam.jpegQuality = 80;
saveParam.m_multiPagesType = 0; saveParam.tiffCompressionBW = 1;
saveParam.m_customMultiPages = 1; saveParam.tiffCompression = 1;
saveParam.tiffQuality = 80;
#if defined(OEM_HANWANG)
saveParam.fileNamePrefix = "HWScan";
#elif defined(OEM_LISICHENG)
saveParam.fileNamePrefix = "LXScan";
#elif defined(OEM_CANGTIAN)
saveParam.fileNamePrefix = "CTSScan";
#elif defined(OEM_ZHONGJING)
saveParam.fileNamePrefix = "ZJScan";
#elif defined(OEM_ZIGUANG)
saveParam.fileNamePrefix = "ZGScan";
#elif defined(OEM_NEUTRAL)
saveParam.fileNamePrefix = "Scan";
#elif defined(OEM_DELI)
saveParam.fileNamePrefix = "DLScan";
#else
saveParam.fileNamePrefix = "HGScan";
#endif
saveParam.fileNameStartIndex = 1;
saveParam.fileNameDigits = 3;
saveParam.fileNameOddEvenType = 0;
saveParam.fileNameExt = "jpg";
saveParam.isOcr = false;
saveParam.isSaveAsMultiPage = false;
saveParam.multiPagesType = 0;
saveParam.customMultiPages = 1;
return saveParam; return saveParam;
} }
int Form_SaveParam::getFormatIndex(const QString &ext, bool ocr) int Form_SaveParam::getFormatIndex(const std::string &ext, bool ocr)
{ {
if (ext == "bmp") if (ext == "bmp")
return 1; return 1;
@ -207,7 +207,10 @@ void Form_SaveParam::on_btn_directory_clicked()
{ {
if (save_dir[save_dir.size() - 1] != '/') if (save_dir[save_dir.size() - 1] != '/')
save_dir += "/"; save_dir += "/";
ui->lineEdit_directory->setText(getStdFileName(save_dir));
char result[512] = {0};
HGBase_StandardiseFileName(save_dir.toStdString().c_str(), result, 512);
ui->lineEdit_directory->setText(QString::fromStdString(result));
} }
} }

View File

@ -2,6 +2,7 @@
#define FORM_SAVEPARAM_H #define FORM_SAVEPARAM_H
#include <QWidget> #include <QWidget>
#include <string>
#include "dialog_writesettings.h" #include "dialog_writesettings.h"
namespace Ui { namespace Ui {
@ -10,23 +11,23 @@ class Form_SaveParam;
struct SaveParam struct SaveParam
{ {
QString m_savePath; std::string savePath;
bool m_isUseSubfolderByTime; bool isUseSubfolderByTime;
bool m_isUseSubfolderByBlankPages; bool isUseSubfolderByBlankPages;
bool m_isUseSubfolderByColor; bool isUseSubfolderByColor;
int m_jpegQuality; int jpegQuality;
int m_tiffCompressionBW; int tiffCompressionBW;
int m_tiffCompression; int tiffCompression;
int m_tiffQuality; int tiffQuality;
QString m_fileNamePrefix; std::string fileNamePrefix;
int m_fileNameStartIndex; int fileNameStartIndex;
int m_fileNameDigits; int fileNameDigits;
int m_fileNameOddEventType; int fileNameOddEvenType;
QString m_fileNameExt; std::string fileNameExt;
bool m_isOcr; bool isOcr;
bool m_isSaveAsMultiPage; bool isSaveAsMultiPage;
int m_multiPagesType; int multiPagesType;
int m_customMultiPages; int customMultiPages;
}; };
class Form_SaveParam : public QWidget class Form_SaveParam : public QWidget
@ -41,7 +42,7 @@ public:
static SaveParam GetDefSaveParam(); static SaveParam GetDefSaveParam();
private: private:
int getFormatIndex(const QString &ext, bool ocr); int getFormatIndex(const std::string &ext, bool ocr);
private slots: private slots:
void on_btn_directory_clicked(); void on_btn_directory_clicked();

View File

@ -8,9 +8,11 @@
#include "base/HGUtility.h" #include "base/HGUtility.h"
#include "imgproc/HGImgProc.h" #include "imgproc/HGImgProc.h"
#include "imgproc/HGOCR.h" #include "imgproc/HGOCR.h"
#include "HGUIGlobal.h"
#include "dialog_scaninfo.h" #include "dialog_scaninfo.h"
#include "form_saveparam.h" #include "form_saveparam.h"
#include "sqlite3.h"
#include "cJSON.h"
#include "HGString.h"
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
@ -55,7 +57,7 @@ MainWindow::MainWindow(QWidget *parent)
ui->tableWidget->horizontalHeader()->setFixedHeight(40); ui->tableWidget->horizontalHeader()->setFixedHeight(40);
ui->tableWidget->horizontalHeader()->setStretchLastSection(true); ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Device Type")); ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Device Type"));
ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Button Type")); ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Button Id"));
ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Device Config")); ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("Device Config"));
ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Save Param")); ui->tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("Save Param"));
ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch); ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
@ -158,36 +160,416 @@ void MainWindow::StopScan()
} }
} }
std::vector<DeviceConfig> MainWindow::MakeDeviceConfigs(const std::string &str)
{
std::vector<DeviceConfig> deviceConfigs;
cJSON* json = cJSON_Parse(str.c_str());
if (NULL != json)
{
cJSON* p = json->child;
while (NULL != p)
{
if (0 != strcmp(p->string, "device_configs"))
{
p = p->next;
continue;
}
if (p->type != cJSON_Array)
{
break;
}
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (pEx->type != cJSON_Object)
{
pEx = pEx->next;
continue;
}
std::string name;
int valueType = 0;
std::string stringValue;
int intValue = 0;
double doubleValue = 0;
bool boolValue = false;
cJSON* pEx2 = pEx->child;
while (NULL != pEx2)
{
if (0 == strcmp(pEx2->string, "name") && pEx2->type == cJSON_String)
{
name = pEx2->valuestring;
}
else if (0 == strcmp(pEx2->string, "value"))
{
if (pEx2->type == cJSON_String)
{
stringValue = pEx2->valuestring;
}
else if (pEx2->type == cJSON_Number)
{
intValue = pEx2->valueint;
doubleValue = pEx2->valuedouble;
}
else if (pEx2->type == cJSON_True)
{
boolValue = true;
}
else if (pEx2->type == cJSON_False)
{
boolValue = false;
}
}
else if (0 == strcmp(pEx2->string, "value_type") && pEx2->type == cJSON_Number)
{
valueType = pEx2->valueint;
}
pEx2 = pEx2->next;
}
DeviceConfig deviceConfig;
deviceConfig.name = name;
deviceConfig.valueType = valueType;
if (1 == deviceConfig.valueType)
deviceConfig.stringValue = stringValue;
else if (2 == deviceConfig.valueType)
deviceConfig.intValue = intValue;
else if (3 == deviceConfig.valueType)
deviceConfig.doubleValue = doubleValue;
else if (4 == deviceConfig.valueType)
deviceConfig.boolValue = boolValue;
deviceConfigs.push_back(deviceConfig);
pEx = pEx->next;
}
break;
}
cJSON_Delete(json);
}
return deviceConfigs;
}
std::string MainWindow::GetDeviceConfigsStr(const std::vector<DeviceConfig> &deviceConfigs)
{
std::string str;
cJSON* json = cJSON_CreateObject();
if (NULL != json)
{
cJSON* array = cJSON_CreateArray();
for (int i = 0; i < deviceConfigs.size(); ++i)
{
cJSON* obj = cJSON_CreateObject();
cJSON_AddItemToObject(obj, "name", cJSON_CreateString(deviceConfigs[i].name.c_str()));
cJSON_AddItemToObject(obj, "value_type", cJSON_CreateNumber(deviceConfigs[i].valueType));
if (1 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateString(deviceConfigs[i].stringValue.c_str()));
}
else if (2 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateNumber(deviceConfigs[i].intValue));
}
else if (3 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", cJSON_CreateNumber(deviceConfigs[i].doubleValue));
}
else if (4 == deviceConfigs[i].valueType)
{
cJSON_AddItemToObject(obj, "value", deviceConfigs[i].boolValue ? cJSON_CreateTrue() : cJSON_CreateFalse());
}
cJSON_AddItemToArray(array, obj);
}
cJSON_AddItemToObject(json, "device_configs", array);
char* resp = cJSON_Print(json);
if (NULL != resp)
{
str = resp;
free(resp);
}
cJSON_Delete(json);
}
return str;
}
SaveParam MainWindow::MakeSaveParam(const std::string &str)
{
SaveParam saveParam = Form_SaveParam::GetDefSaveParam();
cJSON* json = cJSON_Parse(str.c_str());
if (NULL != json)
{
cJSON* p = json->child;
while (NULL != p)
{
if (0 != strcmp(p->string, "save_param"))
{
p = p->next;
continue;
}
if (p->type != cJSON_Object)
{
break;
}
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (0 == strcmp(pEx->string, "save_path") && pEx->type == cJSON_String)
{
saveParam.savePath = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_time") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByTime = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_time") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByTime = false;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_blank_pages") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByBlankPages = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_blank_pages") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByBlankPages = false;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_color") && pEx->type == cJSON_True)
{
saveParam.isUseSubfolderByColor = true;
}
else if (0 == strcmp(pEx->string, "use_subfolder_by_color") && pEx->type == cJSON_False)
{
saveParam.isUseSubfolderByColor = false;
}
else if (0 == strcmp(pEx->string, "jpeg_quality") && pEx->type == cJSON_Number)
{
saveParam.jpegQuality = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_compression_bw") && pEx->type == cJSON_Number)
{
saveParam.tiffCompressionBW = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_compression") && pEx->type == cJSON_Number)
{
saveParam.tiffCompression = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "tiff_quality") && pEx->type == cJSON_Number)
{
saveParam.tiffQuality = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_prefix") && pEx->type == cJSON_String)
{
saveParam.fileNamePrefix = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "filename_start_index") && pEx->type == cJSON_Number)
{
saveParam.fileNameStartIndex = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_digits") && pEx->type == cJSON_Number)
{
saveParam.fileNameDigits = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_odd_even_type") && pEx->type == cJSON_Number)
{
saveParam.fileNameOddEvenType = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "filename_ext") && pEx->type == cJSON_String)
{
saveParam.fileNameExt = Utf8ToStdString(pEx->valuestring);
}
else if (0 == strcmp(pEx->string, "ocr") && pEx->type == cJSON_True)
{
saveParam.isOcr = true;
}
else if (0 == strcmp(pEx->string, "ocr") && pEx->type == cJSON_False)
{
saveParam.isOcr = false;
}
else if (0 == strcmp(pEx->string, "save_as_multi_page") && pEx->type == cJSON_True)
{
saveParam.isSaveAsMultiPage = true;
}
else if (0 == strcmp(pEx->string, "save_as_multi_page") && pEx->type == cJSON_False)
{
saveParam.isSaveAsMultiPage = false;
}
else if (0 == strcmp(pEx->string, "multi_pages_type") && pEx->type == cJSON_Number)
{
saveParam.multiPagesType = pEx->valueint;
}
else if (0 == strcmp(pEx->string, "custom_multi_pages") && pEx->type == cJSON_Number)
{
saveParam.customMultiPages = pEx->valueint;
}
pEx = pEx->next;
}
break;
}
cJSON_Delete(json);
}
return saveParam;
}
std::string MainWindow::GetSaveParamStr(const SaveParam &saveParam)
{
std::string str;
cJSON* json = cJSON_CreateObject();
if (NULL != json)
{
cJSON* obj = cJSON_CreateObject();
cJSON_AddItemToObject(obj, "save_path", cJSON_CreateString(StdStringToUtf8(saveParam.savePath).c_str()));
cJSON_AddItemToObject(obj, "use_subfolder_by_time", saveParam.isUseSubfolderByTime ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "use_subfolder_by_blank_pages", saveParam.isUseSubfolderByBlankPages ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "use_subfolder_by_color", saveParam.isUseSubfolderByColor ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "jpeg_quality", cJSON_CreateNumber(saveParam.jpegQuality));
cJSON_AddItemToObject(obj, "tiff_compression_bw", cJSON_CreateNumber(saveParam.tiffCompressionBW));
cJSON_AddItemToObject(obj, "tiff_compression", cJSON_CreateNumber(saveParam.tiffCompression));
cJSON_AddItemToObject(obj, "tiff_quality", cJSON_CreateNumber(saveParam.tiffQuality));
cJSON_AddItemToObject(obj, "filename_prefix", cJSON_CreateString(StdStringToUtf8(saveParam.fileNamePrefix).c_str()));
cJSON_AddItemToObject(obj, "filename_start_index", cJSON_CreateNumber(saveParam.fileNameStartIndex));
cJSON_AddItemToObject(obj, "filename_digits", cJSON_CreateNumber(saveParam.fileNameDigits));
cJSON_AddItemToObject(obj, "filename_odd_even_type", cJSON_CreateNumber(saveParam.fileNameOddEvenType));
cJSON_AddItemToObject(obj, "filename_ext", cJSON_CreateString(StdStringToUtf8(saveParam.fileNameExt).c_str()));
cJSON_AddItemToObject(obj, "ocr", saveParam.isOcr ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "save_as_multi_page", saveParam.isSaveAsMultiPage ? cJSON_CreateTrue() : cJSON_CreateFalse());
cJSON_AddItemToObject(obj, "multi_pages_type", cJSON_CreateNumber(saveParam.multiPagesType));
cJSON_AddItemToObject(obj, "custom_multi_pages", cJSON_CreateNumber(saveParam.customMultiPages));
cJSON_AddItemToObject(json, "save_param", obj);
char* resp = cJSON_Print(json);
if (NULL != resp)
{
str = resp;
free(resp);
}
cJSON_Delete(json);
}
return str;
}
void MainWindow::LoadCfg() void MainWindow::LoadCfg()
{ {
// TODO 加载配置文件到m_vScanParams m_vScanParams.clear();
HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
char dbPath[256];
sprintf(dbPath, "%s%s", cfgPath, "config.db");
sqlite3 *sqlite = nullptr;
sqlite3_open_v2(dbPath, &sqlite, SQLITE_OPEN_READONLY | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
if (NULL == sqlite)
{
return;
}
sqlite3_stmt* stmt = NULL;
char sql[256];
sprintf(sql, "select * from scan_params");
int ret = sqlite3_prepare(sqlite, sql, -1, &stmt, NULL);
if (0 != ret)
{
sqlite3_close(sqlite);
return;
}
ret = sqlite3_step(stmt);
while (SQLITE_ROW == ret)
{
int id = sqlite3_column_int(stmt, 0);
const char* deviceType = (const char*)sqlite3_column_text(stmt, 1);
int buttonId = sqlite3_column_int(stmt, 2);
const char* deviceConfigs = (const char*)sqlite3_column_text(stmt, 3);
const char* saveParam = (const char*)sqlite3_column_text(stmt, 4);
ScanParam scanParam;
scanParam.deviceType = deviceType;
scanParam.buttonId = buttonId;
scanParam.deviceConfigs = MakeDeviceConfigs(deviceConfigs);
scanParam.saveParam = MakeSaveParam(saveParam);
m_vScanParams.push_back(scanParam);
ret = sqlite3_step(stmt);
}
ret = sqlite3_finalize(stmt);
assert(0 == ret);
sqlite3_close(sqlite);
} }
void MainWindow::SaveCfg() void MainWindow::SaveCfg()
{ {
// TODO 保存m_vScanParams到配置文件 HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
HGBase_CreateDir(cfgPath);
char dbPath[256];
sprintf(dbPath, "%s%s", cfgPath, "config.db");
HGBase_DeleteFile(dbPath);
sqlite3 *sqlite = nullptr;
sqlite3_open_v2(dbPath, &sqlite, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_SHAREDCACHE, NULL);
if (NULL == sqlite)
{
return;
}
int ret = sqlite3_exec(sqlite, "create table scan_params (id integer primary key autoincrement, device_type text, "
"button_id integer, device_configs text, save_param text)", NULL, NULL, NULL);
if (0 != ret)
{
sqlite3_close(sqlite);
return;
}
for (int i = 0; i < (int)m_vScanParams.size(); ++i)
{
std::string deviceConfigsStr = GetDeviceConfigsStr(m_vScanParams[i].deviceConfigs);
std::string saveParamStr = GetSaveParamStr(m_vScanParams[i].saveParam);
char *sql = new char [1024 + deviceConfigsStr.size() + saveParamStr.size()];
sprintf(sql, "insert into scan_params (device_type, button_id, device_configs, save_param) values ('%s', '%d', '%s', '%s')",
m_vScanParams[i].deviceType.c_str(), m_vScanParams[i].buttonId, deviceConfigsStr.c_str(), saveParamStr.c_str());
sqlite3_exec(sqlite, sql, NULL, NULL, NULL);
}
sqlite3_close(sqlite);
} }
QString MainWindow::GetDesc(const std::vector<DeviceConfig> &deviceConfigs) QString MainWindow::GetDesc(const std::vector<DeviceConfig> &deviceConfigs)
{ {
QString desc; QString desc = "-";
return desc; return desc;
} }
QString MainWindow::GetDesc(const SaveParam &saveParam) QString MainWindow::GetDesc(const SaveParam &saveParam)
{ {
QString desc; QString desc = "-";
desc += "[";
desc += tr("Save path:");
desc += saveParam.m_savePath;
desc += "]";
desc += " ";
desc += "[";
desc += tr("Image format:");
desc += saveParam.m_fileNameExt;
desc += "]";
return desc; return desc;
} }
@ -318,12 +700,17 @@ void MainWindow::StartScan(unsigned int buttonId)
m_aquireIntoMultiPageCount = 0; m_aquireIntoMultiPageCount = 0;
QDateTime dateTime = QDateTime::currentDateTime(); QDateTime dateTime = QDateTime::currentDateTime();
if (m_aquireIntoSaveParam.m_isUseSubfolderByTime) if (m_aquireIntoSaveParam.isUseSubfolderByTime)
{ {
m_aquireIntoSaveParam.m_savePath = getStdFileName(m_aquireIntoSaveParam.m_savePath + dateTime.toString("yyyy-MM-dd") + "/"); #ifdef HG_CMP_MSC
std::string newPath = m_aquireIntoSaveParam.savePath + dateTime.toString("yyyy-MM-dd").toStdString() + "\\";
#else
std::string newPath = m_aquireIntoSaveParam.savePath + dateTime.toString("yyyy-MM-dd").toStdString() + "/";
#endif
m_aquireIntoSaveParam.savePath = newPath;
} }
if (m_aquireIntoSaveParam.m_isOcr) if (m_aquireIntoSaveParam.isOcr)
{ {
HGBase_CreateMsgPump(&m_ocrMsgPump); HGBase_CreateMsgPump(&m_ocrMsgPump);
HGBase_OpenThread(ocrThreadFunc, this, &m_ocrThread); HGBase_OpenThread(ocrThreadFunc, this, &m_ocrThread);
@ -416,23 +803,23 @@ void MainWindow::AddManualScanParam()
void MainWindow::SaveImage(HGImage image) void MainWindow::SaveImage(HGImage image)
{ {
if (m_aquireIntoSaveParam.m_isSaveAsMultiPage) if (m_aquireIntoSaveParam.isSaveAsMultiPage)
{ {
if (nullptr == m_scanImgFmtWriter) if (nullptr == m_scanImgFmtWriter)
{ {
assert(m_scanFileName.isEmpty()); assert(m_scanFileName.isEmpty());
HGBase_CreateDir(getStdString(m_aquireIntoSaveParam.m_savePath).c_str()); HGBase_CreateDir(m_aquireIntoSaveParam.savePath.c_str());
QString scanFileName; QString scanFileName;
while (1) while (1)
{ {
scanFileName = m_aquireIntoSaveParam.m_savePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2") scanFileName = QString::fromLocal8Bit(m_aquireIntoSaveParam.savePath.c_str()) + QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNamePrefix.c_str())
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0')) + QString("%1.%2").arg(m_aquireIntoSaveParam.fileNameStartIndex, m_aquireIntoSaveParam.fileNameDigits, 10, QLatin1Char('0'))
.arg(m_aquireIntoSaveParam.m_fileNameExt); .arg(QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNameExt.c_str()));
QFileInfo fileInfo(scanFileName); QFileInfo fileInfo(scanFileName);
if (fileInfo.isFile()) if (fileInfo.isFile())
{ {
++m_aquireIntoSaveParam.m_fileNameStartIndex; ++m_aquireIntoSaveParam.fileNameStartIndex;
} }
else else
{ {
@ -446,7 +833,7 @@ void MainWindow::SaveImage(HGImage image)
fmtType = HGIMGFMT_TYPE_TIFF; fmtType = HGIMGFMT_TYPE_TIFF;
} }
HGImgFmt_OpenImageWriter(getStdString(getStdFileName(scanFileName)).c_str(), fmtType, &m_scanImgFmtWriter); HGImgFmt_OpenImageWriter(scanFileName.toLocal8Bit().toStdString().c_str(), fmtType, &m_scanImgFmtWriter);
if (nullptr != m_scanImgFmtWriter) if (nullptr != m_scanImgFmtWriter)
{ {
m_scanFileName = scanFileName; m_scanFileName = scanFileName;
@ -456,24 +843,24 @@ void MainWindow::SaveImage(HGImage image)
if (nullptr != m_scanImgFmtWriter) if (nullptr != m_scanImgFmtWriter)
{ {
HGImgFmtSaveInfo saveInfo; HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.m_jpegQuality; saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.m_tiffQuality; saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.tiffQuality;
HGImageInfo imgInfo; HGImageInfo imgInfo;
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type) if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{ {
if (1 == m_aquireIntoSaveParam.m_tiffCompressionBW) if (1 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompressionBW) else if (2 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
} }
else else
{ {
if (1 == m_aquireIntoSaveParam.m_tiffCompression) if (1 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompression) else if (2 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
} }
@ -487,7 +874,7 @@ void MainWindow::SaveImage(HGImage image)
if (HGBASE_ERR_OK == HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, image, &saveInfo)) if (HGBASE_ERR_OK == HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, image, &saveInfo))
{ {
++m_aquireIntoMultiPageCount; ++m_aquireIntoMultiPageCount;
if (1 == m_aquireIntoSaveParam.m_multiPagesType && m_aquireIntoMultiPageCount == m_aquireIntoSaveParam.m_customMultiPages) if (1 == m_aquireIntoSaveParam.multiPagesType && m_aquireIntoMultiPageCount == m_aquireIntoSaveParam.customMultiPages)
{ {
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter); HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
m_scanImgFmtWriter = nullptr; m_scanImgFmtWriter = nullptr;
@ -505,7 +892,7 @@ void MainWindow::SaveImage(HGImage image)
} }
m_scanFileName.clear(); m_scanFileName.clear();
++m_aquireIntoSaveParam.m_fileNameStartIndex; ++m_aquireIntoSaveParam.fileNameStartIndex;
m_aquireIntoMultiPageCount = 0; m_aquireIntoMultiPageCount = 0;
} }
} }
@ -515,8 +902,8 @@ void MainWindow::SaveImage(HGImage image)
{ {
assert(nullptr == m_scanImgFmtWriter); assert(nullptr == m_scanImgFmtWriter);
QString savePath = m_aquireIntoSaveParam.m_savePath; QString savePath = QString::fromLocal8Bit(m_aquireIntoSaveParam.savePath.c_str());
if (m_aquireIntoSaveParam.m_isUseSubfolderByBlankPages) if (m_aquireIntoSaveParam.isUseSubfolderByBlankPages)
{ {
HGBool isBlank = HGFALSE; HGBool isBlank = HGFALSE;
HGImgProc_ImageBlankCheck(image, nullptr, &isBlank); HGImgProc_ImageBlankCheck(image, nullptr, &isBlank);
@ -536,10 +923,14 @@ void MainWindow::SaveImage(HGImage image)
char batchDir[20]; char batchDir[20];
sprintf(batchDir, "batch%d", m_aquireIntoBatchStartIndex); sprintf(batchDir, "batch%d", m_aquireIntoBatchStartIndex);
savePath = getStdFileName(savePath + batchDir + "/"); #ifdef HG_CMP_MSC
savePath = savePath + batchDir + "\\";
#else
savePath = savePath + batchDir + "/";
#endif
} }
if (m_aquireIntoSaveParam.m_isUseSubfolderByColor) if (m_aquireIntoSaveParam.isUseSubfolderByColor)
{ {
QString colorModeName; QString colorModeName;
HGImageInfo imgInfo; HGImageInfo imgInfo;
@ -550,21 +941,24 @@ void MainWindow::SaveImage(HGImage image)
colorModeName = tr("gray"); colorModeName = tr("gray");
else else
colorModeName = tr("rgb"); colorModeName = tr("rgb");
#ifdef HG_CMP_MSC
savePath = getStdFileName(savePath + colorModeName + "/"); savePath = savePath + colorModeName + "\\";
#else
savePath = savePath + colorModeName + "/";
#endif
} }
HGBase_CreateDir(getStdString(savePath).c_str()); HGBase_CreateDir(savePath.toLocal8Bit().toStdString().c_str());
while (1) while (1)
{ {
m_scanFileName = savePath + m_aquireIntoSaveParam.m_fileNamePrefix + QString("%1.%2") m_scanFileName = savePath + QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNamePrefix.c_str()) + QString("%1.%2")
.arg(m_aquireIntoSaveParam.m_fileNameStartIndex, m_aquireIntoSaveParam.m_fileNameDigits, 10, QLatin1Char('0')) .arg(m_aquireIntoSaveParam.fileNameStartIndex, m_aquireIntoSaveParam.fileNameDigits, 10, QLatin1Char('0'))
.arg(m_aquireIntoSaveParam.m_fileNameExt); .arg(QString::fromLocal8Bit(m_aquireIntoSaveParam.fileNameExt.c_str()));
QFileInfo fileInfo(m_scanFileName); QFileInfo fileInfo(m_scanFileName);
if (fileInfo.isFile()) if (fileInfo.isFile())
{ {
++m_aquireIntoSaveParam.m_fileNameStartIndex; ++m_aquireIntoSaveParam.fileNameStartIndex;
} }
else else
{ {
@ -573,24 +967,24 @@ void MainWindow::SaveImage(HGImage image)
} }
HGImgFmtSaveInfo saveInfo; HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.m_jpegQuality; saveInfo.jpegQuality = (HGUInt)m_aquireIntoSaveParam.jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.m_tiffQuality; saveInfo.tiffJpegQuality = (HGUInt)m_aquireIntoSaveParam.tiffQuality;
HGImageInfo imgInfo; HGImageInfo imgInfo;
HGBase_GetImageInfo(image, &imgInfo); HGBase_GetImageInfo(image, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type) if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{ {
if (1 == m_aquireIntoSaveParam.m_tiffCompressionBW) if (1 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompressionBW) else if (2 == m_aquireIntoSaveParam.tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
} }
else else
{ {
if (1 == m_aquireIntoSaveParam.m_tiffCompression) if (1 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_aquireIntoSaveParam.m_tiffCompression) else if (2 == m_aquireIntoSaveParam.tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG; saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
} }
@ -603,7 +997,7 @@ void MainWindow::SaveImage(HGImage image)
saveInfo.tiffJpegQuality = 100; saveInfo.tiffJpegQuality = 100;
} }
if (HGBASE_ERR_OK == HGImgFmt_SaveImage(image, fmtType, &saveInfo, getStdString(m_scanFileName).c_str())) if (HGBASE_ERR_OK == HGImgFmt_SaveImage(image, fmtType, &saveInfo, m_scanFileName.toLocal8Bit().toStdString().c_str()))
{ {
if (nullptr != m_ocrMsgPump) if (nullptr != m_ocrMsgPump)
{ {
@ -617,7 +1011,7 @@ void MainWindow::SaveImage(HGImage image)
} }
} }
++m_aquireIntoSaveParam.m_fileNameStartIndex; ++m_aquireIntoSaveParam.fileNameStartIndex;
} }
m_scanFileName.clear(); m_scanFileName.clear();
@ -676,8 +1070,8 @@ int MainWindow::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigne
++p->m_aquireIntoPageIndex; ++p->m_aquireIntoPageIndex;
emit p->scanImage(p->m_aquireIntoPageIndex); emit p->scanImage(p->m_aquireIntoPageIndex);
if ((1 == p->m_aquireIntoSaveParam.m_fileNameOddEventType && 1 != p->m_aquireIntoPageIndex % 2) if ((1 == p->m_aquireIntoSaveParam.fileNameOddEvenType && 1 != p->m_aquireIntoPageIndex % 2)
|| (2 == p->m_aquireIntoSaveParam.m_fileNameOddEventType && 0 != p->m_aquireIntoPageIndex % 2)) || (2 == p->m_aquireIntoSaveParam.fileNameOddEvenType && 0 != p->m_aquireIntoPageIndex % 2))
{ {
// 跳过 // 跳过
} }
@ -841,7 +1235,7 @@ void MainWindow::on_scanFinish()
} }
m_scanFileName.clear(); m_scanFileName.clear();
++m_aquireIntoSaveParam.m_fileNameStartIndex; ++m_aquireIntoSaveParam.fileNameStartIndex;
m_aquireIntoMultiPageCount = 0; m_aquireIntoMultiPageCount = 0;
} }

View File

@ -30,6 +30,10 @@ public:
void StopScan(); void StopScan();
private: private:
static std::vector<DeviceConfig> MakeDeviceConfigs(const std::string &str);
static std::string GetDeviceConfigsStr(const std::vector<DeviceConfig> &deviceConfigs);
static SaveParam MakeSaveParam(const std::string &str);
static std::string GetSaveParamStr(const SaveParam &saveParam);
void LoadCfg(); void LoadCfg();
void SaveCfg(); void SaveCfg();
QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs); QString GetDesc(const std::vector<DeviceConfig> &deviceConfigs);

View File

@ -98,8 +98,6 @@ win32 {
} }
SOURCES += \ SOURCES += \
../../../app/scantool/HGUIGlobal.cpp \
../../../app/scantool/app_cfg.cpp \
../../../app/scantool/dialog_add.cpp \ ../../../app/scantool/dialog_add.cpp \
../../../app/scantool/dialog_scaninfo.cpp \ ../../../app/scantool/dialog_scaninfo.cpp \
../../../app/scantool/dialog_writesettings.cpp \ ../../../app/scantool/dialog_writesettings.cpp \
@ -113,8 +111,6 @@ SOURCES += \
HEADERS += \ HEADERS += \
../../../app/scantool/HGUIGlobal.h \
../../../app/scantool/app_cfg.h \
../../../app/scantool/dialog_add.h \ ../../../app/scantool/dialog_add.h \
../../../app/scantool/dialog_scaninfo.h \ ../../../app/scantool/dialog_scaninfo.h \
../../../app/scantool/dialog_writesettings.h \ ../../../app/scantool/dialog_writesettings.h \