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
+
+
+
+ Twain测试工具
+
+
+
+
+ 选择测试项目:
+
+
+
+
+ 扫描
+
+
+
+
+ 设置
+
+
+
+
+ 设备状态:
+
+
+
+
+ 测试项目类型:
+
+
+
+
+ 重置测试项目
+
+
+
+
+ 设置测试项目标值:
+
+
+
+
+ 获取
+
+
+
+
+ 获取测试项当前值:
+
+
+
+
+ act_scan
+ 扫描
+
+
+
+
+ 选择设备源...
+
+
+
+
+
+ 当前无设备连接
+
+
+
+
+ 设备 %1 已连接
+
+
+
+
+
+
+
+ 提示
+
+
+
+
+ 未找到设备源!
+
+
+
+
+ 设置成功
+
+
+
+
+ 设置失败
+
+
+
+
+ 获取失败
+
+
+
+
+ (背景填充)
+
+
+
+
+ (背面旋转180度)
+
+
+
+
+ (歪斜检测)
+
+
+
+
+ (颜色增强)
+
+
+
+
+ (深色样张)
+
+
+
+
+ (穿孔移除)
+
+
+
+
+ (歪斜容忍度)
+
+
+
+
+ (锐化与模糊)
+
+
+
+
+ (硬件版本)
+
+
+
+
+ (多流输出除红)
+
+
+
+
+ (对折)
+
+
+
+
+ (装订检测)
+
+
+
+
+ (跳过空白发票)
+
+
+
+
+ (穿孔搜索范围)
+
+
+
+
+ (交换正反面)
+
+
+
+
+ (答题卡除红)
+
+
+
+
+ (折角检测)
+
+
+
+
+ (背景填充方式)
+
+
+
+
+ (边缘缩进)
+
+
+
+
+ (背景抗噪等级)
+
+
+
+
+ (阈值)
+
+
+
+
+ (黑白图像噪点优化)
+
+
+
+
+ (噪点优化尺寸)
+
+
+
+
+ (尺寸检测)
+
+
+
+
+ (节能模式)
+
+
+
+
+ (编码)
+
+
+
+
+ (裁切方式)
+
+
+
+
+ (折角大小)
+
+
+
+
+ (图像拆分)
+
+
+
+
+ (是否除背景色)
+
+
+
+
+ (背景色范围)
+
+
+
+
+ (待纸扫描)
+
+
+
+
+ (是否开启多流输出)
+
+
+
+
+ (多流输出类型)
+
+
+
+
+ (是否开启带孔扫描)
+
+
+
+
+ (获取设备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
zcmeHQ31F1P^&dzK@j`0<3ZcbND1yilkWhlc0)j;aM4^%mD)Gh>@FGjJ8*7!MRbv|0
zO{^_yZL8L*ZM9Z8Hb6K9!hH*o8x%R@2-i3N-*0AT_uDVK$tK3y|G#`NnQ!Nt+t@ZC+jfH61M2Ke1^zROhggA1hKzxDt$>PnX
zLR@q<;|G5y3o$o^@%8VqX9)3N8zK7jRlqi#OW|VclcW<2Ta%snDcv
zEygAaG3-?#IshgVDYD@RC!aj+srSe~dH9HsygcpUFJ9sDL|IuGK1lUnNXa)i{9_RR
z)c;A&imd`BR&+U;EWW{2)F%16JN30qyA<1
zN^NC$ihZR>aY2#a=TGs4ayrxPc6-ur~4~Dv!rqVu12^(u;kFTLJ=9`HS7b1Wg!*
z0-EO|Tpsonzn~KoxYPN;=SS>9DeaB>+M~&L{;|
ze#D2zaDS1nh|u`beL00y`Gv;-L!J=HK7Wx18DzM9y#Qq);}@Y|faCY)7i758ixG^c
z!1H|{Fl*v3E-C?*zM>o{^MNwp@dKbHMQ&hJ;K}fy$WnhH;rC<;aVEgYl*ioe3lKEQ
zHwE$iMT}qSPC?9KUonVW1UQcYgdCMW^Kp*=z5rIiU##;dGDW^p(7}_!C@TNtQh!P&
zfG!?|{M{bXO%X2Hm*MVJSXJPj0`hw%;$w>2GhERp9TiB(RlQUJ93Ke{Hp^s~sw^od
zqb7<$A5oCv>7~N+QCYI8)a~}T5sZ2PaQTH*2r0?W_veE(0450s`W!6yb5Z0g%s6O4^@fGG}^8WNZ~7ACEm|-QHD=Xjz0;$|TFH
z{mKOG3*lw>Ng-0{?*~EYR|=6pzYOw`ejduD4^Ma@V}m}D3E>h#`Kdxw@wf5M69UNx{Y-0Q*$>Y2GomqmM1Atmso(?p73JYCUK_BVDe$-_B7gIE
zQYiiMLO&r#{MWlpJ2}%mqNv#IFQQc8x;>tm?)Up4d?0IH;Ae2QJ7pB5
zf?vzg;$k$Gs?z2VH+gKO5QT16)di)61u4UoymNcdq|lO|_9KHv5QE6SMPXH8fu}jL
z^Z6$O9LiKkB>WyxBGJ`QARTZ+fcr~FNeH&8Qa>aa3iP;pN%sX)s(dMh1-=v^(14}C
z*b6C2$%5}0qtJyEN@Rg<1LDeEBCB!=2`{7x;6c$S3+}L%yO3HCi_Iaje1tE#s01R=
zR|>gW;2BSRM@fHaipT8%KE(gbUNU6_g+Y-P5y>bY^2Jx=83FY1>6wi0
zMIdje0?tbrffP!}ssxZ=z&KC8*Ya2M8~&0F%NmgdyE@%>VB{-T$9SMODF?t
z$8w05VB#_@@}NsaelErOc_^c@NvK$kr<%dFhBJJghxh1D9+(XDE9hr^?{+
zFouoh_>Ha-ahZmdLOP|vWy5j2s~(JhLl5%82lZUia;muWhf_tzmeb%*6P;R36J1(Q
z7v0)S7u|n6L-e?KhUnQLAbNESh|AiQi5_r2xnw4Omx$0p#8-Q(#QuH9#DV?C#i6fHh{K0YV5D$T96NSWoIG(#
zSeELILacE5<-d~x5USr5;@R2pm)t+CP0I@}ys&lqUPEe6)VF=Jq(t+a)3V3aH74oP
zBH6?Z`pr7VE~I}8M`ZQ$oQ|WTm(k0aw@KY5Y7v*lik_Hw;h^dzv@y8_{d3y%&${!r
z;XN-*OiW5l?(a;{#S#6&zGHLw%5VU4&Y(wBbo{xi1GBm)qJSZ1IkN9H
z2{9iUd*4KO_X4EE#P;?C7dfK0x)t$8c5K=DazfRYg(nRRC+P2pp4bD>+{SE^yX55N
zW}naRZNu?fJK`tz&&i$GO$8>8&dt5QEnmYl8hExde%g>B{afn5A-TEZ6vm0{Qq|ML
z5gmCYC!dv=bXK!w$%%tOm6AM
zTW;>KjxAdE3h^^CZKLB0)gBU6{M>OP`VP8-jRnuRJIAt>-KW1NCZ-4DYxX#2q>7~f
zKUs)102(a`<_D#h@^SO_ix$vUiD*ARtNRf296MlL7O6e&d7U#-y@l6O%owc
zZoccz5xrV=?bC|cC7#nO2#yfF_?z)3v}o3*WBV3{sgZL6n~)L90-7k<}~|pDBZn
zPSqcHQn&8$M{>po+phs01+?gy>B!gqb65v0QGhJLIj5Dq
zmh2Hj?;|g7dm#u8=+9}@X~>PC@ETsSGlyS0c*w|z3aue}gMQKz%dj5hwB8Ej#T@dx
z(OU)Qsfo5Kw#`#J{vi51HSI^!#bunQw$t;}9v7EkzFLO)>CE8#bf$21n1&HkqO6n>FD8$#7)<8Zn{X#
zOYh8DBF5faA@06ushXSKkNN0>cPtYRVLr;a=tRs#IUk)gVU_Scx?1E-T&?Dy`QEjn
z;7QCupI#5QQ55EHP;=22Fc*Ch^UzYvL0|DziYc6Xmg;%uo3CvZfBiG(m^;MZ|GGnb
z@?m&hSvC#xNz5zfa~`?iE6gGHiKTF>R~!&)Rvr{4hcSC`Oo~Nd_ZQiu$_gYas7Uj7}
zj~n>+d%dfDZ_jYuk0;=*g>9C?xXt;MJ*E1Oh)u4rXVEnDHR;ELh7WV4AiAv#{A5c0
zxjdVX`{JY|DD{F*C-XTep%cCh9GsnfBMNM8zK1_2U7J0!MN(47?Cjpi?lK(#d8y3t
z_nge^bpEz188;)?!R_>RxIfRv<0NeTSUkYU-w
zL94b|NRQ|W01~HBkL)bcu&IJS3GiQw%o5c1ixL_&LjGCJ5t5=1*Z46zmfsQOAph(%
zBuLNB9@#u8p*^GFry>9-MfkF_uIT6@@HYkfoASc5K=zx#X5FCv%lNpNKkM52x=dm-8qFyhBD
znQ=nztUjUSh}0C{-A(mZRd7-YyfB9iY@*Yv})=;cQ`##GK&4P5F<5xby@&&
zwv9VAlvyow`AD6V6q*tTF;LzWZ54>;{?N={>>um<9$EnSk63pIj#GmAbA^*_oDx-s
zZX26Wcb;)6b>}n16IW7`NSoYJ;g
za&l8ls)Enijn#8TP$hZ>f3@x0DW$OrP+$M2duqG%re`2QI~DhTS|v2@+^R8jD&KG1
zW=l49L@x>h*H}3oc{yrbS+nwJD
z`Sond`0en!ThB|{b?%&sWGLXw^Shs|%DnW#1OnLM`{@dz#>tJfO7&9Yubz;GHTB%a
zjn52f6Pd*Ja7lq{kl$q8vLEuxgQMM@dIo6k^xxAII8A}?mI7FVme422)o|-pe~s4u
z|M$V#y!?I1=Q8)9)$-1)3Yj_dQwf^|Ir#E9@~6G$$g8iIE3Y54K;CryVtHToGCA41
zUcU3E?Q;2&1OI2~@~?mFmavmhc=hZsQ+8<`kR5+8U0#v`*K)dgzw`&wB*wTp9AONn
zyYz=MWLlem?9+9&yzRy%^2O&i$wdqH{hy!(bZn{~F*Xn4I74=770XS>H@fKGNe9x5
z-}_%yE+>p#AwT|b_kScE{y1f;yz!cap?W6lvG59q*NlHS9_gTI@e}Y8<}MOC%Kr#D
zES&q59DB=B*{y9^sIKgA*Zdwo{w5#86Kos5ermmh{myqr2k4aLpkC!@ue!||7~}Wr
zj=#y9bm-c8h8#0uku0D2@8^YIKE767){Zi5TCfcpT
zG?&pJ2oH;k|Qf~hLs&KFISup3n6bW(i;`-!PRdPSDU@XI^Tl&`$B`CF&K_`8;C
z7`_GEi398trSJLAG;Tf$aQLPvvf!W_ug=yWITesW2fgstJXMg!=I
zqS9aUaAcjt8%DUhwVfd!xP7UdHRB73bt8G|loe9b=@&~@Rh^VrcaksUZakeD%V^JL=oH%|;(dlPbFNoUyIHtO?
z=WIFS<2?;V1FRK-w*pbii?^Pg@rXNYffc_VJ$h2%?!+5w=+)@JFgn<`${PmFkHH61
z<;cPF8wCF~s}9QH1Ls98$B9#2eiMK1W2@z%LnjnI26uzsi4&*f*I%EIu(ws;owVTZ
zk3Za{g
zse}!+tlV@sf)^MU>&g;q;gbD>llG(u?8@ce-q}%a8catUf?axp^1XrcnV+wfu%Qm&
zM0{XtEn!cNcEPdaRLq66>zq1G!e&5XEj|>V{K98``CfTNmzhyvqH0`p&GeP5?Nn
z)7IcnAK$cl$|pXC@5%2RPhy`yR9u*jeIwQtm`bHHG{gEv%=XE?<+a~_US}Fi|JR-d
zmwBWY@t}N$?L-KFzUgFk6^{Mae^q-RY`{5yh&MqgKV9$@>6
zHQqAt)W;|Ol&4rPQhh!47ASu<`hNC>{2nV`ew&Q;VR(i<#|ke!zbSS)q`9o!4Ee#k
z@yh|&x--amp46Tc{fIj8#YRgcDZsrIBy+38UdRjtgAfXUTy-DVGD%XDb=Z
z`9_BpQziD|)C+&=+Tz9kQH*m9Eb-v;P2-Rrto!Q+&68Mjm7ieD&vD1r&kw71f_*&_
z`-h-ATq2+GuB|iv%pZ1b@~?l6Z;nV_tcjltzKr8^=3Bfz)A#K*OJeVo!Zkeh*W*0O
zI{jF3@0Z6g4meb2{0R%|^B1{mYUP0i(C75RJgPSMSzmp+&XiYzKgpwXunko0rna=^
zJ8>spe)RWUlKmead%JeN8(KKSYis`oe~zbWYXjJiRx1vw&eCQ9?wt~Q$W)zR?O)EF
z^`*R~&z!j04)cHwrNo}LYV}F{46ceO!T#QfxA`3p{w$BWs@m{>?&%G+);-5W{Q*1Y
zAohnefX%0pYo?B4`IKk=!cFqz$?zD^;C&o(yxlvihE?6hr3%{Sf?ZX2|#dQhokQ
zo~W(QVji4#aV@^4`ll>0^DtAc(Wpr_f%=c=WrpBD*?qdssu6e6<>L=_W3CVY{NZ)1
z&UmNOVZb8>{)C5mx?8{ltPeX(#EEO!_usZGqU{?R5T|`#9hXl(zD{D_4R{Fiy%cRP
zz%@Vjutjpo!u>(K4gOLtn7dbv!!^wejMdkkFGblSe!8$${MW8NsKy;!)3nn-uRH26
zmKCl34KCDc;v5MD7j={5hyIt%mXE{!WAkTP??Zf}J!}^^>p?zx-%9B27RkFtSICm0
z%{rZ#3I!8VH;nTr6r9!Jjf9`{eE6Ofwc<}6z*!lXpGT&*(;`;=8~n)!2cgHMOviZ^
zYHe~c>^G>d2Eg0h5z%D
zHzLpKJY?3M$;bVBRB!*0cp2P6U{`zL*q`mi(4|_08UmJA8~{Hru(dJb9vx=lLVJOE
zvuhsvv+nuKoc^Wk-Fa3_8jzkf@xPr8=G}?P$rD(=fUMzIzz6-^zP-ntQKJ4nfpl|b
z?vU=0c`;3qR~|0AEo{&!^7(}1iw08GxRIq`r6A|
zpff0koa6duKt6cKa@9An{fC+bBL^Sqc{v|^@!3t_y>iGD*hu||eMNk>7u1m&+~V%F4!
z1pA$6w2g(oeg4n>->%>7kfQtlNEjpWkNig722OOSM>_UNkKD5|qJ2=l6#x3O81*y*
zZETJjH$=m)wlL~m+(S8*iR6KJ@DGi0q@FzcHTslj>{>m1m3*Nu)xcm@yGL(mkSAu*(
z+*xO|M`Sy8;#Ak)q_3$1`VEhNG~NjFePr1)us%Ff^=H{XTO1t!M5ZS#SZA~$sw=M1
z;&Y5LX2g;ZjT;7k!pyc|{OI`FaX0V8PsvF&=ZQ?uZ4<9!6%6s}8heR4?@{des8cjB+>
zEX@B-oSgXcw>^$C{WOL928^-lic?+V&%l`M4)@}y_}9GtVaJKM*lA+_7SFq;1=}O_
zHRE8H*$}cmURrE`E#jVCkvcs4_($Vr>d5#`yzKSq{8syK;!c~-$viZg_;HntvXX7TB7;)V0uj)${?+uTlB|W-g9*?t@)I9kP%$Fzsd_C4{_k5>&TpE%_E0-OV
z)U8nm^7?PLD824WSi5<-xKjT4)vd}7WZvw(N>9>|<(|GzCsmAUXxqz$N;hlP(>e
zhl9}Z;3T_L`ulmY0-iD)EI^<6deQyScd2M9VikYmY^q0${h0PxT0TuhW&EO
z)p|D0npFGYXe-Bc4xTH3`wk@TE0AyeZY%6d=en|ned@v)1GrV@yLs-&s_Ie;}a
zt9PeaSW}o`L0@BW+y`f2JsH2%`T)aJIL3ok_qG9x>m69Pw(cBVF$Mm=wSHi4F$VT5
zfkD0IVjU)6VZI7DId-K#9l!1GYAjnVoO&tf;Vq79u?D$svUgno`)ay=n>7JFWg5=@
zRQ$m5^<2ZuIimU1=ONM3Ft2Vnmw`IA_uk%KanG2F)P}}mX#cscyKY*txyQu;MN3U*
zJ8h%APeWZO{b!K=)#Fgtz`W?V=7{})7Vhr|z}~OHa2V8Uc30%PIk<-jWhuT6!WREK
z=Zj3+C3PBL1zu<$CXC@h-GYVtQ7rGo)fEj<2Ulgx?s^0EAE~``Xp7PH7d40DeiyZ`
zg*H&M&7jQ(_b$Bk##Wg#Zl#h_z=^o2{OQvs4d>2P;BJLX>vdhRS$ve
zk&Eh#!wrMxr9F7ZQt&%vNzL?)Rws&v*eCyT@g~?59;;?oX4lajKYmi#tkaH+{AADX
zx+~|>F40w2UgF+5+~=ccZRl+L+UQT%VUugY=G@}`Zp$LkPg%5~*t+Ggg}ZAk+*bp8
zi7Jb>GN)9foU&G7e-`%8MU=_1aOV$X?83NZ>;1Pc9YcMk6VAH8k8_?a*g26`6#U1k
zPFjC~%@g$F*5J#_E$(%DGH12LHG2a;?L;R3e62;?4bKt=+NVBx-||4bbujMEWdS80
z9DE)x{7gIH?qwGAb_#y-Iqnm(XxoH5O#49_oo?ZNB#FIxs(y$o?jN#T-DWaQhaxeIwwxv$qX5O@&p7yWZs3UEYL;Do&
zy>ph2v%fK}nm?sq_gOK=OE+9KFZB`B6ZXVM$QqWzdNjV1ubkg_z6H)bu+WAq+I7G5
z{AbqS-sKTIVfceM;qE9)^N_N&u`s5Jh#RD#l2O+Um>aV#qm8&=pUA!?0#*aJ@oR&h
z@zUB%w;;RdxX+ULS=_ITJ$x3FuIuV
zV{fMGn!dD^kCb7AN5iiB7)`tQd5gA$-2Z^Pw{R}m0l9O>5oKS4Gfw4iz-J%4zau1H
z0l!3_RgHgGCi^&?pDJUufeCjnpF;XL`5_2D#=TtQ4_I`tS=M6!M;mvhg&dNvmR4G@
z!2*pHkB8bSUX)CQJyu-w2d^m}iUmLJIwOwN;3w`F`&f{7+}CCO3+}ByY_+&gj_^8R
z)^#=2>WOyr{$I9ppA%u{6YL8j-r08Jf}iEEe~1M?=wGeg4Bya3oHncG;eK=O8;d4W
z6uzjd=douD?J^`=c!tUHiv98v*f;V_6Yi0tosPy!%b!^M6XXF&IrPTwJ`Y60A=rOc
zqbK1>Z$HEO%OAHYT9ID3+sz8XUoAezdbl^w0<4URG^Z@`2=^voJYZoz24ws!iF@)a
z+%>2AFC%|yYQLmE$4Dv0>T<9-^3+6l;OYk
zS4M>&^G@glIOmS6XTsmp!9SGc+!Jo!7ozElvpulSV*Q$fA)cTN;{F!uf;23;ALO1B
zo}YZ&UUg+>AkD!JI_7U^B1KPV0*X0qTjLSH75KxJHiE>8tN@l
zmqXo@Q~sbp!WD9+Uo$>FsXas-<8c1SxUnAgVasqP>Ft?I(4Gw6REL3QUq1WPhM0N@
z%(+sbLke{NF~`qg9UAI^{2%JSNPEsng6HHY+68e@@1*IL$|Dx^4VY`q;Tk#TSyr&G
zRdI+5#}o&_``A~5G3OGC`aZ>sQuKO^dZ^v9SjLjFVk
zsQoXimLE{O66VE9AJQHP3y;{Y4hr0_z0(f32(g%tKmx{m;OD
z?|ByXJb7!Pz4=D@N?VwC;D=2nb!bYDrv3Qzx3oWJ{m7U-9TXLZ@GuDuM6YN
zx_I#RWt+icHPYU|f9s7)y7G+Nu0JA;SPuBdA^&5KAMASF+V!`zJwbVD?*R9h@SKM}
zX{4RzA>wgm&vKldw>4nki^m5)y2jqT6!olh`VsBd&OedkJ<2#c{dGUWu*mRm9MYCN
zh5Mi_-1CgKqV>bN&Cal}cf^7nTuhl03m2T{m^!88^S}*g^Q3`Y{?raX>)yz2)z=2$
zxATO454R5$Ka`GT!X}1ep#au)Qe(kcQ+UCX>r>GdD!6}`^Kj?*6Zd9E9j_9mNJp9O
z3?qLy!}M?Vmu%|~VLtWzGaKS+vo+x{rL?jF`@yVtaNZzk&xi6S2tR0R*R2?ysg3@+
z{SpVwUqpMQmUn>-YT&mJCr*L<$q
z2k8!71@)Z)oE83!>2Ajl^Yv8BjVeHTH5O&5SOcw@a|
zFMa@h@8;b*k7BH;bVWA)ampXk+3-i0=9*tL|8z+Wa6OHE)8aZRS9do%l<2}gNY@5n)&yukLyyuo>7WeuHhO5z%eUrjlw?7!?fX+
zmp*1|F8a#+2!18ak>HonstJBx&?jnMA=Ko~6}%tS_^G(_hTn~k6$owqBt#{{aRFRh
zKJMR9@#6L4$k)K3e88pPG(OIwU_(`pUZ4=!Y<)eJxWA3eW*YJ>Mzzi8P0ye9J8f9o>Xhnb==B
z6MCU?b#DjfoVcgfi}}8*rhMx94LU+E=efoXoPB_HW}Io}B&zRK`#W)NNMQWk%fAsE
zSl4rng?=?$o+;P(k>%Utv45hi70!?d)D>UG$6Bz9`^GqSbL!iizZr*)eZA4+nK)cC
z#98olf&pjpxwr5qV7{F^@t~*C7&lyJC&H2t;FS;st
z{w(3*nRMDd!s41r2p`gvbAVXo-!+6Mychub026OXGZ&<(aj6+({jQ6TgAKtMLJJ
z{$4wrESIz}E*2bIx8i;k+<8sA6X@xVDqAM*Wg!n#FMpa^hjG?{^R5Jzi?$$(ezigA
z^SQp~gaK>mIHPr2XpNcWIi0h7=D{^OXZg5mJR*OVkGsNEe$+|w%y4`8q!sQI50%Zk
z7I;1-+dktPIHHwLxLMzJ7=}tqfZ%mG$?1V
z?iEo!@gv@ZjrSfo`I>e^xEDU6{0DH(mOX!a`OJss=9_%@jduw#oQ~(%X`O{`FU%_>
zf1acKF?i|zl4AyY-SZuGEdlnKoR{jkX}JDb2G2C5%^J^`=UFa11Bv0mbriW9duw^t
z8};BvgWo8h!hNX8ce=9UahCtk*cD#to=qQ4SPcIgJdLl%no`NX_ut;3?$|J4#^>2&
z)V*umS+*WCFkk2d0?zXJn`0b%JX1dFnK~l!0oOLDk1d<_18#7*+q0SDP_~6Qjx;L;q=~){vaqalCJ##!T0Crxqe}hg{
zttFWH3hEWq_>A*$>b~Fj-4;a(o(H1iQ7%K@jdP1kc~1Yn?4>S@A5}bO`H}L+&{Nl`
zf!X*>``ptT6^~%f9V(yqBup9~$@fkeo_=DTSD#-JuK()t&t5)xJ4|2m&avu1=*KCi
zOxT3G;~N9{U)U6&j5PJn@-KJDU)@ejyP|JsVfXcS@*wmJG3oB40e@p$6)4Q#pxRjN
z<(o1M9n5cCKKPAvcSS3wrZB8~2H56mra#Lv<%WIo8uyOke9}NoWz_bqJn)5=_BlVz
zu#ZVinFi0ua(SKz&)s?Cz7^iu@{jjB?%8(X{+Ga*k&Dn5V^4(I6RUM##Ghxpn0>#L
zW%1@)pLm#Cx!8{2dvQOw_p$p|dZEkuR?DmpobjYlLdx>$U0-=xtpMGGi)sd{9N?N%
zYL`$3RfNqo!n@stz9D`BToXFx!Mu=XYDi^Kh8<>Asge)%6jV#JhBJDKeu?-|hX?EX
zsdRNnBG50UUekBp6s$?_OK*>LAn1L0uPDw;doSy{*mD$?fw9LJ+CJK4PPi|a4x2vk
z|IJILM1u$8yfGXz+s7JwFTfaz=fUxw51xg|FxZzzth2y|GZl88)zb3ZG|su6!nv-T
z?{H3XE$$?M9kLwKFT5`Qv#aM%36Dj>vXk>yj7OEtFXs^)&+z^M*~08^GV
zHX6rnywibkspB#55A8p13T2HO_tA3ROS#PZ#R8vv0o$vMa{IQUlIN8^^Tayzds-$A
z8!*4Zq{lh0F4}r9J;!fcf8
+#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
+
+
+