From bd15a99d117528abcc6a2f223c17a6970d0b3828 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Tue, 20 Feb 2024 18:24:51 +0800 Subject: [PATCH] =?UTF-8?q?TwainTest=E5=B7=A5=E5=85=B7=EF=BC=8C=E5=BE=AE?= =?UTF-8?q?=E8=B0=83=E7=95=8C=E9=9D=A2=EF=BC=8C=E5=A2=9E=E5=8A=A0twain?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/twaintest/TwainTest_resource.qrc | 9 + app/twaintest/TwainTest_zh_CN.qm | Bin 0 -> 3646 bytes app/twaintest/TwainTest_zh_CN.ts | 287 ++++++++++++++++++++++++++ app/twaintest/image_rsc/logo/logo.ico | Bin 0 -> 42166 bytes app/twaintest/main.cpp | 6 + app/twaintest/mainwindow.cpp | 221 ++++++++++++++++++-- app/twaintest/mainwindow.h | 8 +- app/twaintest/mainwindow.ui | 144 ++++++------- build2/qt/HGTwainTest/HGTwainTest.pro | 6 + 9 files changed, 591 insertions(+), 90 deletions(-) create mode 100644 app/twaintest/TwainTest_resource.qrc create mode 100644 app/twaintest/TwainTest_zh_CN.qm create mode 100644 app/twaintest/TwainTest_zh_CN.ts create mode 100644 app/twaintest/image_rsc/logo/logo.ico diff --git a/app/twaintest/TwainTest_resource.qrc b/app/twaintest/TwainTest_resource.qrc new file mode 100644 index 00000000..d3b486d3 --- /dev/null +++ b/app/twaintest/TwainTest_resource.qrc @@ -0,0 +1,9 @@ + + + + TwainTest_zh_CN.qm + + + image_rsc/logo/logo.ico + + diff --git a/app/twaintest/TwainTest_zh_CN.qm b/app/twaintest/TwainTest_zh_CN.qm new file mode 100644 index 0000000000000000000000000000000000000000..40fb282d35b2f847ee389887303485d2861df735 GIT binary patch literal 3646 zcma);du&rx9LG<$c73etx`7i2lFkIUBgjJ%!G#d_WOc8uEn~}o%kAymdbitqn|p6p zy0MLnn6NBl_+V^?pb`+#M2s=G89`7SI+=h$5<+|=${#4f;1mTS_&e*?-HuZ+`{ShD z@ALcqUgy`dcE~?x^tb(c$8zU?vh|G<-xVUH8$#&bAVMk2P|DYN2pJY2!(b;umUFrV zzryE~X5Fz79--86-3N1f5JKZC zeN?~E4*%C*(??g$MJR2Z{z!j5Lg`QFM>e&A-FE%i`EaJ!>HoS7eswntc`0zBLPONA zfLYZT7YW+`t0@UNH;Eau_NHJ{1G-#;*qI4^+ixP{6G z`;^0$q1Nl*r^WIon+NgVPye}KF2uRY`q;-;Ada=xB|~6mJY;=p>rt@3WR28hK^z&@ zcD@JfJ2DixIVB(oej*P61aEcAfz`A_<0FGAE^wFAo`OnOMG29E zQXjb3+EIJob-uPaG+aH$lat7ED#HenCk`c>;x^?s{H7wHG*6{BeSs7x|h=vY_IHl0S&M3qz(RTq;B4dxAZd;^K*V(EYMb6|hBTz7!Z z*B~~kL=51FiX=gji5b~qGu$ojOs)MxgW9Rmg5naouzWpTTTroq93(WOak+Oso3`5>Z|d9)V6?J&ew{w6m$w1RP&qV&>4xwyp+m^j^PT zqi&hN%Orsefi8yp^E;lLQLxN7=w@Jkl1Xk8s&30=O-nVBSyUNJZG@4zT25AyjUF_r z-8(SgVfy`@2Q{>nDpOjEBw2>BC5l4GJ3sVX?mby=L{8+=pnA&bA|g;4e8YVs?lg_L zm2w7|Ce9NQc(M{;-Q7F>Y0gd9qBg2Rinyc*Cns$MY!y65H1aO5pBF6Xd%5PWMmL?R z+)&|l($yQh#AqSGDQbKB#$F9+pC)NHB(2U+#DQ`7hSVH3t z5iwh^y!YFIXzNWpRuAS)zbJ~BkdKF35OsK?AugZvqR5`OZw|B&UL=mqzxRF59**-_ z#at`Ta*l;79lYX@pwc7{7VJSjzE!7DwoQ^yH8rddg>6kse4XwU7#8D2`)VQ8g9gs80G8O_0om9Dj#XziF|nUJFhngcHxV!S5o zpnm1g9x#u^!3;QT~IrZJf2=30 zB#Lm~$kKZDLNq@vmgbVBU`QniSzjFMnurchPaMc}b4sj|vFRa^dOW0YLhoT2;&AAD zPj-oMGovSYgKT@uzUxzitZ9yIl8J>vYz@rtbQS?)VsA12$lhWHiM_>G^4^*-;Iq45 zi>GGCfD&d|PEi`ef)FJY&5m=7O*~qL|E6( + + + + MainWindow + + + MainWindow + Twain测试工具 + + + + Set Capbility: + 选择测试项目: + + + + Scan + 扫描 + + + + Set Cap + 设置 + + + + Device Status: + 设备状态: + + + + Capbility Type: + 测试项目类型: + + + + Reset Capbility + 重置测试项目 + + + + Set cap Content: + 设置测试项目标值: + + + + Get Cap + 获取 + + + + Get cap Content: + 获取测试项当前值: + + + + menu_scan + act_scan + 扫描 + + + + act_selectDevice + 选择设备源... + + + + + No device connected + 当前无设备连接 + + + + Device %1 is open + 设备 %1 已连接 + + + + + + + Prompt + 提示 + + + + Device source not found! + 未找到设备源! + + + + Set successfully + 设置成功 + + + + Set failed + 设置失败 + + + + Get failed + 获取失败 + + + + (FillBackground) + (背景填充) + + + + (BackRotate180) + (背面旋转180度) + + + + (ScrewDetectEnable) + (歪斜检测) + + + + (EnhanceColor) + (颜色增强) + + + + (DARK_SAMPLE) + (深色样张) + + + + (FillHole) + (穿孔移除) + + + + (ScrewLevel) + (歪斜容忍度) + + + + (Sharpen) + (锐化与模糊) + + + + (HardwareVersion) + (硬件版本) + + + + (MultiOutputRed) + (多流输出除红) + + + + (EnFold) + (对折) + + + + (StableDetectEnable) + (装订检测) + + + + (DiscardBlankVince) + (跳过空白发票) + + + + (FillHoleRatio) + (穿孔搜索范围) + + + + (SwitchFrontBack) + (交换正反面) + + + + (HsvCorrect) + (答题卡除红) + + + + (DogEarDelection) + (折角检测) + + + + (FillBackgroundMode) + (背景填充方式) + + + + (CroporDesaskewIndent) + (边缘缩进) + + + + (CropNoise) + (背景抗噪等级) + + + + (CroporDesaskewThreshold) + (阈值) + + + + (DetachNoise) + (黑白图像噪点优化) + + + + (DetachNoiseValue) + (噪点优化尺寸) + + + + (SizeDetect) + (尺寸检测) + + + + (LowPowerMode) + (节能模式) + + + + (ENCODE) + (编码) + + + + (CropModel) + (裁切方式) + + + + (DogEarDistance) + (折角大小) + + + + (ImageSplit) + (图像拆分) + + + + (FadeBackground) + (是否除背景色) + + + + (FADE_BKG_VALUE) + (背景色范围) + + + + (TO_BE_SCAN) + (待纸扫描) + + + + (MULTI_OUT) + (是否开启多流输出) + + + + (MULTI_OUT_TYPE) + (多流输出类型) + + + + (SCAN_WITH_HOLE) + (是否开启带孔扫描) + + + + (IP) + (获取设备IP) + + + diff --git a/app/twaintest/image_rsc/logo/logo.ico b/app/twaintest/image_rsc/logo/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..bb062276227310791cc64db6e4895eeea530eeb3 GIT binary patch literal 42166 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 +#include int main(int argc, char *argv[]) { QApplication a(argc, argv); + + QTranslator translator_app; + if (translator_app.load(":translation/TwainTest_zh_CN.qm")) + a.installTranslator(&translator_app); + MainWindow w; w.show(); return a.exec(); diff --git a/app/twaintest/mainwindow.cpp b/app/twaintest/mainwindow.cpp index 0d504eef..65acf1e8 100644 --- a/app/twaintest/mainwindow.cpp +++ b/app/twaintest/mainwindow.cpp @@ -16,17 +16,22 @@ MainWindow::MainWindow(QWidget *parent) , m_cacheUuid("") { ui->setupUi(this); + this->setWindowIcon(QIcon(":images/image_rsc/logo/logo.ico")); HGChar cacheUuid[256] = { 0 }; HGBase_GetUuid(cacheUuid, 256); m_cacheUuid = cacheUuid; + updateUiEnable(false); + initCapbility(); + QStringList capTypes = { "TWTY_INT8", "TWTY_UINT8", "TWTY_INT16", "TWTY_UINT16", "TWTY_INT32", "TWTY_UINT32", "TWTY_BOOL","TWTY_FIX32", "TWTY_STR32", "TWTY_STR64", "TWTY_STR128", "TWTY_STR255" }; ui->comboBox_capType->addItems(capTypes); ui->comboBox_capType->setCurrentIndex(0); ui->comboBox_capType->setEditable(true); + ui->comboBox_setCap->setEditable(true); ui->label_deviceStatus->setText(tr("No device connected")); HGTwain_CreateDSM((HWND)this->winId(), &m_twainDSM); @@ -61,6 +66,7 @@ MainWindow::~MainWindow() void MainWindow::on_act_selectDevice_triggered() { ui->label_deviceStatus->setText(tr("No device connected")); + updateUiEnable(false); if (m_twainDS != nullptr) { @@ -77,6 +83,7 @@ void MainWindow::on_act_selectDevice_triggered() { HGTwain_LoginDS(m_twainDS, "user", "huagoscan"); ui->label_deviceStatus->setText(tr("Device %1 is open").arg(getDeviceName())); + updateUiEnable(true); } } else @@ -88,19 +95,13 @@ void MainWindow::on_act_selectDevice_triggered() } } -void MainWindow::on_pushButton_SetCap_clicked() +void MainWindow::on_pushButton_setCap_clicked() { - QString capCode = ui->lineEdit_setCap->text(); + QString capCode = ui->comboBox_setCap->currentText(); bool ok = false; - HGUShort cap = capCode.toInt(&ok, 16); + HGUShort cap = capCode.left(6).toInt(&ok, 16); - HGCapValue value; - QString capType = ui->comboBox_capType->currentText(); - if (capType == "TWTY_BOOL") - { - value.type = HGCAPVALUE_TYPE_BOOL; - value.valueBool = ui->lineEdit_setCapContent->text().toInt(); - } + HGCapValue value = getHGCapValue(); HGResult ret = HGTwain_SetCapbility(m_twainDS, cap, &value, ui->checkBox_resetCap->isChecked()); if (ret == HGBASE_ERR_OK) @@ -113,9 +114,76 @@ void MainWindow::on_pushButton_SetCap_clicked() } } +void MainWindow::on_pushButton_getCap_clicked() +{ + QString capCode = ui->comboBox_setCap->currentText(); + bool ok = false; + HGUShort cap = capCode.left(6).toInt(&ok, 16); + + HGCapValue value2; + HGTwain_GetCapbility(m_twainDS, 0x8803, &value2); + + HGCapValue value; + HGResult ret = HGTwain_GetCapbility(m_twainDS, cap, &value); + if (ret != HGBASE_ERR_OK) + { + QMessageBox::information(this, tr("Prompt"), tr("Get failed")); + return; + } + + if (value.type == HGCAPVALUE_TYPE_CHAR) + { + ui->lineEdit_getCapContent->setText(QString(value.valueChar)); + } + else if (value.type == HGCAPVALUE_TYPE_BYTE) + { + ui->lineEdit_getCapContent->setText(QString(value.valueByte)); + } + else if (value.type == HGCAPVALUE_TYPE_SHORT) + { + ui->lineEdit_getCapContent->setText(QString::number(value.valueShort)); + } + else if (value.type == HGCAPVALUE_TYPE_USHORT) + { + ui->lineEdit_getCapContent->setText(QString::number(value.valueUShort)); + } + else if (value.type == HGCAPVALUE_TYPE_INT) + { + ui->lineEdit_getCapContent->setText(QString::number(value.valueInt)); + } + else if (value.type == HGCAPVALUE_TYPE_UINT) + { + ui->lineEdit_getCapContent->setText(QString::number(value.valueUInt)); + } + else if (value.type == HGCAPVALUE_TYPE_BOOL) + { + ui->lineEdit_getCapContent->setText(value.valueBool ? QString("true") : QString("false")); + } + else if (value.type == HGCAPVALUE_TYPE_FLOAT) + { + ui->lineEdit_getCapContent->setText(QString::number(value.valueFloat, 'f', 4)); + } + else if (value.type == HGCAPVALUE_TYPE_STR32) + { + ui->lineEdit_getCapContent->setText(QString::fromLocal8Bit(value.valueStr32)); + } + else if (value.type == HGCAPVALUE_TYPE_STR64) + { + ui->lineEdit_getCapContent->setText(QString::fromLocal8Bit(value.valueStr64)); + } + else if (value.type == HGCAPVALUE_TYPE_STR128) + { + ui->lineEdit_getCapContent->setText(QString::fromLocal8Bit(value.valueStr128)); + } + else if (value.type == HGCAPVALUE_TYPE_STR255) + { + ui->lineEdit_getCapContent->setText(QString::fromLocal8Bit(value.valueStr255)); + } +} + void MainWindow::on_pushButton_scan_clicked() { - HGResult ret = HGTwain_EnableDS(m_twainDS, HGFALSE, (HWND)this->winId(), DSEventFunc, this, DSImageFunc, this); + HGTwain_EnableDS(m_twainDS, HGFALSE, (HWND)this->winId(), DSEventFunc, this, DSImageFunc, this); } void MainWindow::on_newImage(void *image) @@ -127,7 +195,7 @@ void MainWindow::on_newImage(void *image) info.jpegQuality = 100; info.tiffCompression = HGIMGFMT_TIFFCOMP_LZW; info.tiffJpegQuality = 0; - HGResult ret = HGImgFmt_SaveImage((HGImage)image, 0, &info, getStdString(scanFileName).c_str()); + HGImgFmt_SaveImage((HGImage)image, 0, &info, getStdString(scanFileName).c_str()); } void MainWindow::on_clearRes() @@ -137,6 +205,7 @@ void MainWindow::on_clearRes() void MainWindow::DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param) { + (void)ds; MainWindow* p = (MainWindow*)param; if (HGTWAIN_EVENT_TYPE_SCANFINISHED == event || HGTWAIN_EVENT_TYPE_CLOSEDSREQ == event) { @@ -146,11 +215,139 @@ void MainWindow::DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param) HGUInt MainWindow::DSImageFunc(HGTwainDS ds, HGImage image, HGUInt type, HGPointer param) { + (void)ds; + (void)type; MainWindow* p = (MainWindow*)param; emit p->newImage(image); return HGBASE_ERR_OK; } +void MainWindow::initCapbility() +{ + QStringList cap = {}; + + cap.append(QString("0x8004") + tr("(FillBackground)")); + cap.append(QString("0x8005") + tr("(BackRotate180)")); + cap.append(QString("0x8006") + tr("(ScrewDetectEnable)")); + cap.append(QString("0x8007") + tr("(EnhanceColor)")); + cap.append(QString("0x8016") + tr("(DARK_SAMPLE)")); + cap.append(QString("0x8018") + tr("(FillHole)")); + cap.append(QString("0x8021") + tr("(ScrewLevel)")); + cap.append(QString("0x8022") + tr("(Sharpen)")); + cap.append(QString("0x8025") + tr("(HardwareVersion)")); + cap.append(QString("0x8026") + tr("(MultiOutputRed)")); + cap.append(QString("0x8037") + tr("(EnFold)")); + + cap.append(QString("0x8090") + tr("(StableDetectEnable)")); + cap.append(QString("0x8091") + tr("(DiscardBlankVince)")); + cap.append(QString("0x8092") + tr("(FillHoleRatio)")); + cap.append(QString("0x8094") + tr("(SwitchFrontBack)")); + cap.append(QString("0x8095") + tr("(HsvCorrect)")); + cap.append(QString("0x8096") + tr("(DogEarDelection)")); + cap.append(QString("0x8097") + tr("(FillBackgroundMode)")); + cap.append(QString("0x8098") + tr("(CroporDesaskewIndent)")); + cap.append(QString("0x8099") + tr("(CropNoise)")); + cap.append(QString("0x8100") + tr("(CroporDesaskewThreshold)")); + cap.append(QString("0x8101") + tr("(DetachNoise)")); + cap.append(QString("0x8102") + tr("(DetachNoiseValue)")); + cap.append(QString("0x8103") + tr("(SizeDetect)")); + cap.append(QString("0x8104") + tr("(LowPowerMode)")); + cap.append(QString("0x8105") + tr("(ENCODE)")); + cap.append(QString("0x8106") + tr("(CropModel)")); + cap.append(QString("0x8107") + tr("(DogEarDistance)")); + cap.append(QString("0x8108") + tr("(ImageSplit)")); + cap.append(QString("0x8109") + tr("(FadeBackground)")); + cap.append(QString("0x8110") + tr("(FADE_BKG_VALUE)")); + cap.append(QString("0x8111") + tr("(TO_BE_SCAN)")); + cap.append(QString("0x8112") + tr("(MULTI_OUT)")); + cap.append(QString("0x8113") + tr("(MULTI_OUT_TYPE)")); + cap.append(QString("0x8114") + tr("(SCAN_WITH_HOLE)")); + cap.append(QString("0x8200") + tr("(IP)")); + + //TODO 还需要添加剩余的twain测试项 + + ui->comboBox_setCap->addItems(cap); +} + +HGCapValue MainWindow::getHGCapValue() +{ + HGCapValue value; + QString capType = ui->comboBox_capType->currentText(); + if (capType == "TWTY_INT8") + { + value.type = HGCAPVALUE_TYPE_CHAR; + QString text = ui->lineEdit_setCapContent->text(); + if (!text.isEmpty()) + value.valueChar = text.at(0).toLatin1(); + } + else if (capType == "TWTY_UINT8") + { + value.type = HGCAPVALUE_TYPE_BYTE; + QString text = ui->lineEdit_setCapContent->text(); + if (!text.isEmpty()) + value.valueChar = text.at(0).toLatin1(); + } + else if (capType == "TWTY_UINT8") + { + value.type = HGCAPVALUE_TYPE_SHORT; + value.valueShort = ui->lineEdit_setCapContent->text().toShort(); + } + else if (capType == "TWTY_INT16") + { + value.type = HGCAPVALUE_TYPE_USHORT; + value.valueUShort = ui->lineEdit_setCapContent->text().toUShort(); + } + else if (capType == "TWTY_INT32") + { + value.type = HGCAPVALUE_TYPE_INT; + value.valueInt = ui->lineEdit_setCapContent->text().toInt(); + } + else if (capType == "TWTY_UINT32") + { + value.type = HGCAPVALUE_TYPE_UINT; + value.valueUInt = ui->lineEdit_setCapContent->text().toUInt(); + } + else if (capType == "TWTY_BOOL") + { + value.type = HGCAPVALUE_TYPE_BOOL; + value.valueBool = (HGBool)ui->lineEdit_setCapContent->text().toInt(); + } + else if (capType == "TWTY_FIX32") + { + value.type = HGCAPVALUE_TYPE_FLOAT; + value.valueFloat = ui->lineEdit_setCapContent->text().toFloat(); + } + else if (capType == "TWTY_STR32") + { + value.type = HGCAPVALUE_TYPE_BYTE; + strcpy(value.valueStr32, ui->lineEdit_setCapContent->text().toStdString().c_str()); + } + else if (capType == "TWTY_STR64") + { + value.type = HGCAPVALUE_TYPE_BYTE; + strcpy(value.valueStr64, ui->lineEdit_setCapContent->text().toStdString().c_str()); + } + else if (capType == "TWTY_STR128") + { + value.type = HGCAPVALUE_TYPE_BYTE; + strcpy(value.valueStr128, ui->lineEdit_setCapContent->text().toStdString().c_str()); + } + else if (capType == "TWTY_STR255") + { + value.type = HGCAPVALUE_TYPE_BYTE; + strcpy(value.valueStr255, ui->lineEdit_setCapContent->text().toStdString().c_str()); + } + + return value; +} + +void MainWindow::updateUiEnable(bool enable) +{ + ui->pushButton_setCap->setEnabled(enable); + ui->pushButton_getCap->setEnabled(enable); + ui->pushButton_scan->setEnabled(enable); +} + QString MainWindow::getDeviceName() { HGChar devName[256] = {0}; diff --git a/app/twaintest/mainwindow.h b/app/twaintest/mainwindow.h index de8eda19..5a9fc4cd 100644 --- a/app/twaintest/mainwindow.h +++ b/app/twaintest/mainwindow.h @@ -20,7 +20,9 @@ public: private slots: void on_act_selectDevice_triggered(); - void on_pushButton_SetCap_clicked(); + void on_pushButton_setCap_clicked(); + + void on_pushButton_getCap_clicked(); void on_pushButton_scan_clicked(); @@ -36,6 +38,10 @@ private: static void HGAPI DSEventFunc(HGTwainDS ds, HGUInt event, HGPointer param); static HGUInt HGAPI DSImageFunc(HGTwainDS ds, HGImage image, HGUInt type, HGPointer param); + void initCapbility(); + HGCapValue getHGCapValue(); + + void updateUiEnable(bool enable); QString getDeviceName(); QString getCachePath(); QString getCacheFileName(HGImage img); diff --git a/app/twaintest/mainwindow.ui b/app/twaintest/mainwindow.ui index 8f21ed2f..9967b621 100644 --- a/app/twaintest/mainwindow.ui +++ b/app/twaintest/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 800 - 600 + 706 + 506 @@ -17,7 +17,7 @@ - 30 + 60 80 91 16 @@ -27,21 +27,11 @@ Set Capbility: - - - - 130 - 70 - 161 - 31 - - - - 310 - 450 + 290 + 400 101 41 @@ -50,11 +40,11 @@ Scan - + - 240 - 200 + 430 + 210 111 41 @@ -66,9 +56,9 @@ - 30 + 60 30 - 331 + 361 16 @@ -79,9 +69,9 @@ - 130 - 130 - 161 + 160 + 140 + 231 31 @@ -89,8 +79,8 @@ - 20 - 130 + 50 + 140 101 16 @@ -102,8 +92,8 @@ - 370 - 210 + 560 + 220 121 16 @@ -115,89 +105,89 @@ - 410 - 70 + 160 + 210 231 - 31 + 41 - 330 - 80 - 71 + 40 + 220 + 111 16 - Content: + Set cap Content: - + - 20 - 320 - 91 - 16 - - - - Get Capbility: - - - - - - 130 - 310 - 161 - 31 - - - - - - - 330 - 320 - 71 - 16 - - - - Content: - - - - - - 410 - 310 + 160 + 70 231 31 + + + + 430 + 290 + 111 + 41 + + + + Get Cap + + + + + + 40 + 300 + 101 + 16 + + + + Get cap Content: + + + + + + 160 + 290 + 231 + 41 + + + 0 0 - 800 + 706 22 - + - act_scan + menu_scan - + diff --git a/build2/qt/HGTwainTest/HGTwainTest.pro b/build2/qt/HGTwainTest/HGTwainTest.pro index 28f7eae9..5045630e 100644 --- a/build2/qt/HGTwainTest/HGTwainTest.pro +++ b/build2/qt/HGTwainTest/HGTwainTest.pro @@ -106,3 +106,9 @@ HEADERS += \ FORMS += \ ../../../app/twaintest/mainwindow.ui + +RESOURCES += \ + ../../../app/twaintest/TwainTest_resource.qrc + +TRANSLATIONS += \ + ../../../app/twaintest/TwainTest_zh_CN.ts