mirror of http://192.168.1.51:8099/lmh188/twain3.0
修复安卓机器usb连接断开卡死问题
This commit is contained in:
parent
86fc897645
commit
1e8d06e002
|
@ -19,3 +19,13 @@
|
|||
5.根据arm固件进行兼容,以A1209为分界线,根据版本显示连续扫描
|
||||
6.屏蔽对折前旋转,奥鸽要求
|
||||
7.修复首选项保存时亮度读取异常问题
|
||||
8.修复scsanner reset时判断条件错误问题
|
||||
9.针对usb连接异常屏蔽显示扫描纸张速度等
|
||||
10.修复安卓首张异常时的版本兼容问题
|
||||
11.修复单面扫描不出图问题
|
||||
12.更新穿孔算法
|
||||
13.修复非3399设备尺寸检测索引错误问题
|
||||
14.添加除底色功能
|
||||
15.修复折角 尺寸取图超时问题
|
||||
16.修复安卓机器usb连接断开卡死问题
|
||||
|
||||
|
|
|
@ -11,10 +11,11 @@
|
|||
|
||||
IMPLEMENT_DYNAMIC(CAboutDlg, CDialogEx)
|
||||
|
||||
CAboutDlg::CAboutDlg(std::string hardwareversion, std::string serialnum,CWnd* pParent /*=nullptr*/)
|
||||
CAboutDlg::CAboutDlg(std::string hardwareversion, std::string serialnum,std::string macadder,CWnd* pParent /*=nullptr*/)
|
||||
: CDialogEx(IDD_ABOUT, pParent)
|
||||
,m_hardwareversion(hardwareversion)
|
||||
,m_serialnum(serialnum)
|
||||
,m_macadder(macadder)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -44,10 +45,11 @@ BOOL CAboutDlg::OnInitDialog()
|
|||
// TODO: 在此添加额外的初始化
|
||||
CString hardwareversion(m_hardwareversion.c_str());
|
||||
CString serialnum(m_serialnum.c_str());
|
||||
CString macadder(m_macadder.c_str());
|
||||
SetDlgItemText(IDC_LBSCANNERNAMEVALUE, SCANNERNAME);
|
||||
SetDlgItemText(IDC_LBHARDWAREVALUE, hardwareversion);
|
||||
SetDlgItemText(IDC_LBSERIALNUMVALUE, serialnum);
|
||||
|
||||
SetDlgItemText(IDC_LBTOTALSCANVALU, macadder);
|
||||
SetDlgItemText(IDC_LBDERIVERVERSON, HG_VERSION_INFO);
|
||||
SetDlgItemText(IDC_LBCOMPANY, LIMIT_INFO);
|
||||
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PICABOUTHUAGO);
|
||||
|
@ -59,10 +61,12 @@ BOOL CAboutDlg::OnInitDialog()
|
|||
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
|
||||
#elif defined AUGE
|
||||
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP4));
|
||||
#elif defined MAKERIGHTWAY
|
||||
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP5));
|
||||
#endif
|
||||
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
|
||||
pStatic->SetBitmap(hBitmap);
|
||||
#if defined MAKEHUAGAO || defined LANXUM || defined HANVON || defined AUGE
|
||||
#if defined MAKEHUAGAO || defined LANXUM || defined HANVON || defined AUGE ||defined MAKERIGHTWAY
|
||||
GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(TRUE);
|
||||
#else
|
||||
GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(FALSE);
|
||||
|
|
|
@ -8,7 +8,7 @@ class CAboutDlg : public CDialogEx
|
|||
DECLARE_DYNAMIC(CAboutDlg)
|
||||
|
||||
public:
|
||||
CAboutDlg(std::string hardwareversion,std::string serialnum, CWnd* pParent = nullptr); // 标准构造函数
|
||||
CAboutDlg(std::string hardwareversion,std::string serialnum,std::string macadder, CWnd* pParent = nullptr); // 标准构造函数
|
||||
virtual ~CAboutDlg();
|
||||
|
||||
// 对话框数据
|
||||
|
@ -26,4 +26,5 @@ public:
|
|||
private:
|
||||
std::string m_hardwareversion;
|
||||
std::string m_serialnum;
|
||||
std::string m_macadder;
|
||||
};
|
||||
|
|
|
@ -195,7 +195,7 @@ END_MESSAGE_MAP()
|
|||
|
||||
void CBasicPage::OnBnClickedBtnabout()
|
||||
{
|
||||
CAboutDlg dlg(m_hdVersion, m_serialNum,this);
|
||||
CAboutDlg dlg(m_hdVersion, m_serialNum,m_macadder,this);
|
||||
dlg.DoModal();
|
||||
|
||||
}
|
||||
|
@ -261,10 +261,11 @@ void CBasicPage::OnClickedBtndiscardsetting()
|
|||
discardblank_percent = settingdlg.discardblank_percent;
|
||||
}
|
||||
|
||||
void CBasicPage::SetScannerInfo(std::string hdVersion, std::string serialNum)
|
||||
void CBasicPage::SetScannerInfo(std::string hdVersion, std::string serialNum,std::string macadder)
|
||||
{
|
||||
m_hdVersion = hdVersion;
|
||||
m_serialNum = serialNum;
|
||||
m_macadder = macadder;
|
||||
}
|
||||
|
||||
void CBasicPage::updateCmbDuplex(BOOL insert)
|
||||
|
|
|
@ -48,10 +48,11 @@ protected:
|
|||
public:
|
||||
BOOL m_bUV;
|
||||
afx_msg void OnClickedBtndiscardsetting();
|
||||
void SetScannerInfo(std::string hdVersion, std::string serialNum);
|
||||
void SetScannerInfo(std::string hdVersion, std::string serialNum,std::string macadder);
|
||||
private:
|
||||
std::string m_hdVersion;
|
||||
std::string m_serialNum;
|
||||
std::string m_macadder;
|
||||
public:
|
||||
afx_msg void OnCbnSelchangeCblowpowermode();
|
||||
afx_msg void OnNMReleasedcaptureSliderdpi(NMHDR* pNMHDR, LRESULT* pResult);
|
||||
|
|
|
@ -66,10 +66,15 @@ void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool
|
|||
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
|
||||
}
|
||||
if (val == 0)
|
||||
{
|
||||
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE);
|
||||
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(TRUE);
|
||||
}
|
||||
else {
|
||||
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE);
|
||||
((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE);
|
||||
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
|
||||
((CButton*)GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->SetCheck(FALSE);
|
||||
}
|
||||
if (0 == val||val==3)//彩色
|
||||
{
|
||||
|
@ -83,6 +88,7 @@ void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool
|
|||
m_temp->EnableWindow(TRUE);
|
||||
t_chMultiOutput->SetCheck(FALSE);
|
||||
t_chMultiOutput->EnableWindow(FALSE);
|
||||
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
|
||||
}
|
||||
if (val == 2)
|
||||
{
|
||||
|
@ -127,8 +133,11 @@ void CImageProcPage::DoDataExchange(CDataExchange* pDX)
|
|||
DDX_Control(pDX, IDC_EDIT_HOLE, m_edit_hole);
|
||||
DDX_Control(pDX, IDC_EDITDETACHNOISE, m_edit_detachnoise);
|
||||
DDX_Control(pDX, IDC_SLIDERDETACHNOISE, m_slider_detachnoise);
|
||||
DDX_Control(pDX, IDC_SLIDERFADEBACKRANGE, m_slider_faderange);
|
||||
DDX_Control(pDX, IDC_EDITFADEBACKRANGE, m_edit_faderange);
|
||||
DDX_Control(pDX, IDC_CMBFILTER, m_cmBoxFilter);
|
||||
DDX_Control(pDX, IDC_CMBSHARPEN, m_cmBoxSharpen);
|
||||
DDX_Check(pDX, IDC_CKBACKGROUNDSMOOTH, m_ckbfadeback);
|
||||
DDX_Check(pDX, IDC_CKFILLBLACKRECT, m_ckbFillBlack);
|
||||
DDX_Check(pDX, IDC_CKAUTODESKREW, m_ckbAutoDeskrew);
|
||||
DDX_Check(pDX, IDC_CKMULTIOUTPUT, m_ckbMultioutput);
|
||||
|
@ -144,6 +153,10 @@ BOOL CImageProcPage::OnInitDialog()
|
|||
m_edit_hole.SetParams(0.01, 0.50, 10, _T("%0.2f"),20);
|
||||
m_edit_hole.SetValue(0.10);
|
||||
|
||||
m_edit_faderange.SetSlideLink(this, IDC_SLIDERFADEBACKRANGE);
|
||||
m_edit_faderange.SetParams(1, 128, 1);
|
||||
m_edit_faderange.SetValue(40);
|
||||
|
||||
m_edit_detachnoise.SetSlideLink(this, IDC_SLIDERDETACHNOISE);
|
||||
m_edit_detachnoise.SetParams(10, 50, 10);
|
||||
m_edit_detachnoise.SetValue(detachnoise);
|
||||
|
@ -169,6 +182,7 @@ BEGIN_MESSAGE_MAP(CImageProcPage, CTabPageSSL)
|
|||
ON_BN_CLICKED(IDC_CKFILLBLACKRECT, &CImageProcPage::OnBnClickedCkfillblackrect)
|
||||
ON_BN_CLICKED(IDC_CKAUTODESKREW, &CImageProcPage::OnBnClickedCkautodeskrew)
|
||||
ON_BN_CLICKED(IDC_CHECKDETACHNOISE, &CImageProcPage::OnBnClickedCheckdetachnoise)
|
||||
ON_BN_CLICKED(IDC_CKBACKGROUNDSMOOTH, &CImageProcPage::OnBnClickedCkbackgroundsmooth)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CImageProcPage::EnableOutHoleCheckChanged(BOOL enable)
|
||||
|
@ -282,3 +296,13 @@ void CImageProcPage::OnBnClickedCheckdetachnoise()
|
|||
m_edit_detachnoise.EnableWindow(m_ckbDetachNoise);
|
||||
m_slider_detachnoise.EnableWindow(m_ckbDetachNoise);
|
||||
}
|
||||
|
||||
|
||||
void CImageProcPage::OnBnClickedCkbackgroundsmooth()
|
||||
{
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
UpdateData();
|
||||
m_ckbfadeback = m_ckbfadeback && (!is_bw);
|
||||
GetDlgItem(IDC_SLIDERFADEBACKRANGE)->EnableWindow(m_ckbfadeback);
|
||||
GetDlgItem(IDC_EDITFADEBACKRANGE)->EnableWindow(m_ckbfadeback);
|
||||
}
|
||||
|
|
|
@ -19,8 +19,11 @@ public:
|
|||
CSmartEdit m_edit_hole;
|
||||
CLinkSlider m_slider_detachnoise;
|
||||
CSmartEdit m_edit_detachnoise;
|
||||
CLinkSlider m_slider_faderange;
|
||||
CSmartEdit m_edit_faderange;
|
||||
CComboBox m_cmBoxFilter;
|
||||
CComboBox m_cmBoxSharpen;
|
||||
BOOL m_ckbfadeback;
|
||||
BOOL m_ckbFillBlack;
|
||||
BOOL m_ckbAutoDeskrew;
|
||||
BOOL m_ckbMultioutput;
|
||||
|
@ -61,4 +64,5 @@ public:
|
|||
afx_msg void OnBnClickedCkfillblackrect();
|
||||
afx_msg void OnBnClickedCkautodeskrew();
|
||||
afx_msg void OnBnClickedCheckdetachnoise();
|
||||
afx_msg void OnBnClickedCkbackgroundsmooth();
|
||||
};
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx)
|
||||
|
||||
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum, std::uint32_t mbversion ,CWnd* pParent /*=nullptr*/)
|
||||
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum,std::string macadder, std::uint32_t mbversion ,CWnd* pParent /*=nullptr*/)
|
||||
: CDialogEx(IDD_TWAINUI, pParent)
|
||||
, m_tabCtrl(new CTabCtrlSSL())
|
||||
, m_pageBrightness(new CBrightnessPage)
|
||||
|
@ -30,14 +30,7 @@ CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::st
|
|||
m_hardwareVersion = hardwareversion;
|
||||
m_serialnum = serialnum;
|
||||
m_mbversion = mbversion;
|
||||
//memset(settings.get(), 0, sizeof(GScanCap));
|
||||
/*m_pageImageProc->noise = caps.noise;
|
||||
m_pageImageProc->is_convex = caps.is_convex;
|
||||
m_pageImageProc->threshold = caps.AutoCrop_threshold;
|
||||
m_pageImageProc->indent = caps.indent;
|
||||
m_pageImageProc->detachnoise = caps.detachnoise.detachnoise;
|
||||
m_pageImageProc->is_detachnoise = caps.detachnoise.is_detachnoise;*/
|
||||
|
||||
m_macadder = macadder;
|
||||
}
|
||||
|
||||
CTwainUI::~CTwainUI()
|
||||
|
@ -74,7 +67,7 @@ BOOL CTwainUI::OnInitDialog()
|
|||
m_pageBasic.reset(new CBasicPage(dataChangeFunction));
|
||||
m_pageBasic->Create(IDD_PAGEBASIC, this);
|
||||
m_pageBasic->discardblank_percent = settings->discardblank_percent;
|
||||
m_pageBasic->SetScannerInfo(m_hardwareVersion, m_serialnum);
|
||||
m_pageBasic->SetScannerInfo(m_hardwareVersion, m_serialnum, m_macadder);
|
||||
m_tabCtrl->AddSSLPage(_T("基本"), nPageID++, m_pageBasic.get());
|
||||
m_pageBrightness->Create(IDD_PAGEBRIGHTNESS, this);
|
||||
m_tabCtrl->AddSSLPage(_T("亮度"), nPageID++, m_pageBrightness.get());
|
||||
|
@ -223,11 +216,19 @@ void CTwainUI::UpdateUI()
|
|||
m_pageImageProc->m_edit_hole.SetValue(settings->fillhole.fillholeratio/ 100.0);//穿孔搜索范围比例系数
|
||||
m_pageImageProc->m_edit_hole.EnableWindow(settings->fillhole.is_fillhole == TRUE ? TRUE : FALSE);
|
||||
m_pageImageProc->GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(m_pageImageProc->m_ckbRemoveHole);
|
||||
m_pageImageProc->m_ckbfadeback = settings->fadeback;
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->SetCheck(m_pageImageProc->m_ckbfadeback);
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->EnableWindow(settings->pixtype == 2);
|
||||
m_pageImageProc->m_edit_faderange.SetValue(settings->fadeback_range);
|
||||
m_pageImageProc->m_slider_faderange.EnableWindow(settings->fadeback);
|
||||
m_pageImageProc->m_edit_faderange.EnableWindow(settings->fadeback);
|
||||
|
||||
m_pageImageProc->m_ckbDetachNoise = settings->detachnoise.is_detachnoise == TRUE ? TRUE : FALSE;//黑白降噪是否启用
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(m_pageImageProc->m_ckbDetachNoise);
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(settings->pixtype != 2);
|
||||
m_pageImageProc->m_edit_detachnoise.SetValue(settings->detachnoise.detachnoise);
|
||||
m_pageImageProc->m_slider_detachnoise.EnableWindow(settings->detachnoise.is_detachnoise == TRUE ? TRUE : FALSE);
|
||||
m_pageImageProc->m_edit_detachnoise.EnableWindow(settings->detachnoise.is_detachnoise == TRUE ? TRUE : FALSE);
|
||||
if (settings->pixtype == 2)
|
||||
m_pageImageProc->m_ckbMultioutput = settings->multi_output_red == TRUE ? TRUE : FALSE;//多流除红
|
||||
else
|
||||
|
@ -572,6 +573,8 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
|||
settings->hardwarecaps.capturepixtype = TWPT_RGB;
|
||||
settings->detachnoise.is_detachnoise = m_pageImageProc->m_ckbDetachNoise;
|
||||
settings->detachnoise.detachnoise = m_pageImageProc->m_slider_detachnoise.m_iPosition;
|
||||
settings->fadeback = m_pageImageProc->m_ckbfadeback;
|
||||
settings->fadeback_range = m_pageImageProc->m_slider_faderange.m_iPosition;
|
||||
settings->fillhole.is_fillhole = configItem->EnOutHole;
|
||||
settings->fillhole.fillholeratio = configItem->OutHoleRatio;
|
||||
settings->multi_output_red = configItem->EnMultiOutPutR;
|
||||
|
|
|
@ -165,7 +165,7 @@ class CTwainUI : public CDialogEx
|
|||
DECLARE_DYNAMIC(CTwainUI)
|
||||
|
||||
public:
|
||||
CTwainUI(TwGlue glue,GScanCap caps,std::string confirmtitle,std::string hardwareversion,std::string serialnum,std::uint32_t mbversion ,CWnd* pParent = nullptr); // 标准构造函数
|
||||
CTwainUI(TwGlue glue,GScanCap caps,std::string confirmtitle,std::string hardwareversion,std::string serialnum, std::string macadder,std::uint32_t mbversion ,CWnd* pParent = nullptr); // 标准构造函数
|
||||
virtual ~CTwainUI();
|
||||
|
||||
void UpdateUI();
|
||||
|
@ -185,6 +185,7 @@ public:
|
|||
public:
|
||||
std::string m_hardwareVersion;
|
||||
std::string m_serialnum;
|
||||
std::string m_macadder;
|
||||
std::uint32_t m_mbversion;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -107,8 +107,8 @@ static map<UsbSupported, string> msgs = {
|
|||
{UsbSupported::NO_FEED,"无纸!请放置纸张!"},
|
||||
{UsbSupported::FEED_IN_ERROR,"搓纸失败!请整理纸张!"},
|
||||
{UsbSupported::PAPER_JAM,"卡纸!"},
|
||||
{UsbSupported::DETECT_DOUBLE_FEED,"双张,请核对扫描试卷张数!"},
|
||||
{UsbSupported::DETECT_STAPLE,"检测到订书针!"},
|
||||
{UsbSupported::DETECT_DOUBLE_FEED,"双张,请核对扫描张数!"},
|
||||
{UsbSupported::DETECT_STAPLE,"检测到订书钉!"},
|
||||
{UsbSupported::PAPER_SKEW,"纸张歪斜!请整理纸张!"},
|
||||
{UsbSupported::COUNT_MODE,"计数模式,请退出计数模式!"},
|
||||
{UsbSupported::HARDWARE_ERROR,"硬件异常!请重启扫描仪!"},
|
||||
|
@ -234,6 +234,7 @@ public:
|
|||
virtual BOOL IsConnected() = 0;
|
||||
virtual std::string GetFWVersion() = 0;
|
||||
virtual std::string GetSerialNum() = 0;
|
||||
virtual std::string GetMacAdder() = 0;
|
||||
virtual std::uint32_t GetMotorFPGA() = 0;
|
||||
virtual std::uint32_t GetScanFPGA() = 0;
|
||||
virtual bool is_scan() = 0;
|
||||
|
|
|
@ -35,7 +35,7 @@ static void scanner_cmd(std::shared_ptr<IUsb>& usb, int cmd)
|
|||
|
||||
|
||||
|
||||
GScanO1003399::GScanO1003399()
|
||||
GScanO1003399::GScanO1003399():preProcImgindex(0)
|
||||
{
|
||||
im_data.reset(new std::vector<char>());
|
||||
//open(0x3072, 0x139);
|
||||
|
@ -189,6 +189,22 @@ std::string GScanO1003399::GetFWVersion()
|
|||
return fw;
|
||||
}
|
||||
|
||||
std::string GScanO1003399::GetMacAdder()
|
||||
{
|
||||
std::string mac;
|
||||
auto fwver = GetFWVersion();
|
||||
if (fwver[5] > 'A' && atoi(fwver.substr(6, 4).c_str()) >= 111) {
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
{
|
||||
scanner_write_reg(m_usb, SR_GET_MACADDR, 0);
|
||||
mac.resize(17);
|
||||
read_data(&mac[0], mac.length(), 200);
|
||||
}
|
||||
}
|
||||
else
|
||||
mac = "The firmware version does not support reading";
|
||||
return mac;
|
||||
}
|
||||
std::string GScanO1003399::GetSerialNum()
|
||||
{
|
||||
std::string sn;
|
||||
|
@ -259,7 +275,7 @@ void GScanO1003399::config_params(GScanCap& param)
|
|||
cfg.g200params.screw_detect_level = (unsigned int)cfg.g200params.screw_detect_enable ? secrewMaps[param.hardwarecaps.skrewdetectlevel] : 0;
|
||||
cfg.g200params.is_autopaper = param.hardwarecaps.is_autopaper;
|
||||
cfg.g200params.enable_sizecheck = param.en_sizecheck == 1 ? 1 : 0;
|
||||
cfg.g200params.unused_one = cfg.g200params.sizeerror_errorratio = 0;
|
||||
cfg.g200params.is_textcorrect = cfg.g200params.unused_one = cfg.g200params.sizeerror_errorratio = 0;
|
||||
|
||||
#else
|
||||
|
||||
|
@ -328,26 +344,9 @@ void GScanO1003399::config_params(GScanCap& param)
|
|||
param39.threshold = param.threshold;
|
||||
param39.multiOutput = MultiOutput::Unused;
|
||||
param39.normalCrop = param.normalCrop;
|
||||
param39.fadeback = param.fadeback;
|
||||
param39.fadebackrange = param.fadeback_range;
|
||||
m_usb->write_bulk(¶m39, sizeof(param39));
|
||||
if (param.is_autotext)
|
||||
{
|
||||
TCHAR szIniFile[MAX_PATH] = { 0 };
|
||||
SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE);
|
||||
#ifdef LANXUM
|
||||
_tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata\\osd.traineddata"));
|
||||
#elif defined AUGE
|
||||
_tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata"));
|
||||
#elif defined HANVON
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata"));
|
||||
#else
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata"));
|
||||
#endif //
|
||||
int iLen = WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, NULL, 0, NULL, NULL);
|
||||
char* chRtn = new char[iLen * sizeof(char)];
|
||||
WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, chRtn, iLen, NULL, NULL);
|
||||
m_autotext.reset(new CImageApplyRotation(CImageApplyRotation::RotationType::AutoTextOrientation, false, param.resolution_dst, chRtn));
|
||||
delete[] chRtn;
|
||||
}
|
||||
}
|
||||
|
||||
void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||
|
@ -363,6 +362,7 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
|||
else
|
||||
is_kernelsnap_211209 = false;
|
||||
error_index = autopaperstop = 0;
|
||||
is_back = false;
|
||||
roller_num = this->count();
|
||||
scanflag = true;
|
||||
while (m_paths.Size() > 0)
|
||||
|
@ -381,13 +381,6 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
|||
scanflag = false;
|
||||
return;
|
||||
}
|
||||
if (scan_mode())
|
||||
{
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(COUNT_MODE);
|
||||
scanflag = false;
|
||||
return;
|
||||
}
|
||||
//if (!Get_Scanner_PaperOn())
|
||||
//{
|
||||
// devState = DEV_WRONG;
|
||||
|
@ -395,6 +388,13 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
|||
// scanflag = false;
|
||||
// return;
|
||||
//}
|
||||
if (scan_mode())
|
||||
{
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(COUNT_MODE);
|
||||
scanflag = false;
|
||||
return;
|
||||
}
|
||||
|
||||
start();
|
||||
bool procmode = (m_param.resolution_dst > 200.0f || m_param.papertype == 52 || m_param.papertype == 54 || m_param.papertype == 131);
|
||||
|
@ -403,6 +403,7 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
|||
b_imgprothread = false;
|
||||
m_imgprocthread->join();
|
||||
}
|
||||
preProcImgindex = 0;
|
||||
m_imgprocthread.reset(new thread(&GScanO1003399::proc, this, procmode));
|
||||
}
|
||||
|
||||
|
@ -493,7 +494,7 @@ void GScanO1003399::usb_run()
|
|||
switch (info.From)
|
||||
{
|
||||
case IMG:
|
||||
if (is_runing())
|
||||
if (is_runing() && (im_dev_count()>0))
|
||||
im_rx();
|
||||
break;
|
||||
case MtBoard:
|
||||
|
@ -712,6 +713,7 @@ int GScanO1003399::im_dev_count()
|
|||
static int num = 0;
|
||||
void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
||||
{
|
||||
preProcImgindex++;
|
||||
auto& buffs= G400Decode(buff).getImageBuffs();
|
||||
vector<cv::Mat> mats;
|
||||
StopWatch sw;
|
||||
|
@ -743,7 +745,27 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
|||
buffs.clear();
|
||||
if (m_param.is_autotext)
|
||||
{
|
||||
m_autotext->apply(mats, m_param.is_duplex);
|
||||
//m_autotext->apply(mats, m_param.is_duplex);
|
||||
|
||||
TCHAR szIniFile[MAX_PATH] = { 0 };
|
||||
SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE);
|
||||
#ifdef LANXUM
|
||||
_tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata\\osd.traineddata"));
|
||||
#elif defined AUGE
|
||||
_tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata"));
|
||||
#elif defined HANVON
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata"));
|
||||
#elif defined MAKERIGHTWAY
|
||||
_tcscat(szIniFile, _T("\\twain_32\\RIGHTWAYSCAN\\tessdata\\osd.traineddata"));
|
||||
#else
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata"));
|
||||
#endif //
|
||||
int iLen = WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, NULL, 0, NULL, NULL);
|
||||
char* chRtn = new char[iLen * sizeof(char)];
|
||||
WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, chRtn, iLen, NULL, NULL);
|
||||
CImageApplyRotation autotext(CImageApplyRotation::RotationType::AutoTextOrientation, false, m_param.resolution_dst, chRtn);
|
||||
autotext.apply(mats, m_param.is_duplex);
|
||||
delete[] chRtn;
|
||||
}
|
||||
if (m_param.automaticcolor)
|
||||
{
|
||||
|
@ -751,13 +773,27 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
|||
}
|
||||
if (m_param.is_split)
|
||||
{
|
||||
if (!is_back)
|
||||
{
|
||||
CImageApplyRotation autotext(CImageApplyRotation::RotationType::Rotate_90_clockwise, false, m_param.resolution_dst, NULL);
|
||||
autotext.apply(mats[0], false);
|
||||
if (m_param.is_duplex)
|
||||
is_back = true;
|
||||
}
|
||||
else if (is_back && m_param.is_duplex)
|
||||
{
|
||||
CImageApplyRotation autotext(CImageApplyRotation::RotationType::Rotate_90_anti_clockwise, false, m_param.resolution_dst, NULL);
|
||||
autotext.apply(mats[0], true);
|
||||
is_back = false;
|
||||
}
|
||||
CImageApplySplit m_split;
|
||||
std::vector<cv::Mat> tmp;
|
||||
for (auto& var : mats)
|
||||
{
|
||||
if (!var.empty())
|
||||
{
|
||||
auto sptmp = m_split.apply(var);
|
||||
int side = (preProcImgindex % 2) == 1 ? 0 : 1;
|
||||
auto sptmp = m_split.apply(var, m_param.is_duplex? side:0);
|
||||
for (auto& matvar : sptmp)
|
||||
{
|
||||
if (!matvar.empty())
|
||||
|
@ -765,6 +801,8 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
|||
}
|
||||
}
|
||||
}
|
||||
if(is_back && tmp.size()>=2)
|
||||
std::swap(tmp[0], tmp[1]);
|
||||
mats.swap(tmp);
|
||||
}
|
||||
for (int i = 0; i < mats.size(); i++) {
|
||||
|
@ -797,6 +835,7 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
mats.clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ public:
|
|||
virtual BOOL IsConnected() override;
|
||||
virtual std::string GetFWVersion() override;
|
||||
virtual std::string GetSerialNum() override;
|
||||
virtual std::string GetMacAdder() override;
|
||||
virtual std::uint32_t GetMotorFPGA() override;
|
||||
virtual std::uint32_t GetScanFPGA() override;
|
||||
virtual bool is_scan() override;
|
||||
|
@ -73,6 +74,7 @@ private:
|
|||
private:
|
||||
volatile int devState;
|
||||
volatile int Error_Code;
|
||||
volatile bool is_back;
|
||||
volatile bool scanflag;
|
||||
volatile bool keeplastimg;
|
||||
volatile bool autopaperstop;
|
||||
|
@ -83,12 +85,13 @@ private:
|
|||
volatile bool b_usbthread;
|
||||
BlockingQueue<std::shared_ptr<std::vector<char>>> imgs;
|
||||
BlockingQueue<std::string> m_paths;
|
||||
std::shared_ptr<CImageApplyRotation> m_autotext;
|
||||
//std::shared_ptr<CImageApplyRotation> m_autotext;
|
||||
std::shared_ptr <std::thread> m_imgprocthread;
|
||||
std::shared_ptr<std::thread> m_usbthread;
|
||||
std::shared_ptr<std::vector<char>> im_data;
|
||||
BlockingQueue<std::shared_ptr<std::vector<unsigned char>>> m_imagedata;
|
||||
std::atomic_int imagecount;
|
||||
int preProcImgindex;//预处理图像编号
|
||||
void* huagods;
|
||||
deviceevent_callback dev_callback;
|
||||
};
|
||||
|
|
|
@ -245,11 +245,17 @@ int GScanO200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
BOOL GScanO200::IsConnected()
|
||||
{
|
||||
return m_usb.get() && m_usb->is_connected();
|
||||
}
|
||||
|
||||
std::string GScanO200::GetMacAdder()
|
||||
{
|
||||
return "This device does not support reading";
|
||||
}
|
||||
|
||||
std::string GScanO200::GetFWVersion()
|
||||
{
|
||||
if (m_usb.get() && m_usb->is_connected()) {
|
||||
|
@ -476,9 +482,8 @@ bool GScanO200::Get_IsImageQueueEmpty()
|
|||
|
||||
void GScanO200::reset()
|
||||
{
|
||||
while (!m_pImages->empty())
|
||||
if(!m_pImages->empty())
|
||||
m_pImages->clear();
|
||||
|
||||
}
|
||||
|
||||
UINT32 GScanO200::get_ErrorCode()
|
||||
|
|
|
@ -15,6 +15,7 @@ public:
|
|||
virtual BOOL IsConnected() override;
|
||||
virtual std::string GetFWVersion() override;
|
||||
virtual std::string GetSerialNum() override;
|
||||
virtual std::string GetMacAdder() override;
|
||||
virtual std::uint32_t GetMotorFPGA() override;
|
||||
virtual std::uint32_t GetScanFPGA() override;
|
||||
virtual bool is_scan() override;
|
||||
|
|
|
@ -574,6 +574,10 @@ void GScanO400::usbhotplug(bool isleft)
|
|||
}
|
||||
}
|
||||
|
||||
std::string GScanO400::GetMacAdder()
|
||||
{
|
||||
return "The firmware version does not support reading";
|
||||
}
|
||||
void GScanO400::updateHVRatio()
|
||||
{
|
||||
if (!(m_usb.get() && m_usb->is_connected()))
|
||||
|
|
|
@ -17,6 +17,7 @@ public:
|
|||
virtual std::string GetSerialNum() override;
|
||||
virtual std::uint32_t GetMotorFPGA() override;
|
||||
virtual std::uint32_t GetScanFPGA() override;
|
||||
virtual std::string GetMacAdder()override;
|
||||
virtual bool is_scan() override;
|
||||
virtual BOOL Get_Scanner_PaperOn() override;
|
||||
virtual int Get_Roller_num() override;
|
||||
|
|
|
@ -251,6 +251,10 @@ BOOL GScanO400Android::IsConnected()
|
|||
return m_usb.get() && m_usb->is_connected();
|
||||
}
|
||||
|
||||
std::string GScanO400Android::GetMacAdder() {
|
||||
return "固件版本不支持读取";
|
||||
}
|
||||
|
||||
std::string GScanO400Android::GetFWVersion()
|
||||
{
|
||||
if (m_usb.get() && m_usb->is_connected()) {
|
||||
|
@ -575,6 +579,7 @@ void GScanO400Android::usbhotplug(bool isleft)
|
|||
if (isleft) {
|
||||
devState = DEV_WRONG;
|
||||
Error_Code = USB_DISCONNECTED;
|
||||
image_last = false;
|
||||
m_pImages->setscanflags(false);
|
||||
if (m_usb.get())
|
||||
m_usb.reset();
|
||||
|
@ -606,6 +611,7 @@ void GScanO400Android::usbmain()
|
|||
devState = DEV_ISRUNNING;
|
||||
image_last = true;
|
||||
bool haveError = false;
|
||||
bool is_first_error = true;
|
||||
try
|
||||
{
|
||||
StopWatch sw;
|
||||
|
@ -628,6 +634,7 @@ void GScanO400Android::usbmain()
|
|||
switch (usbcb.u32_Data) {
|
||||
case HAVE_IMAGE:
|
||||
{
|
||||
is_first_error = false;
|
||||
int totalNum = usbcb.u32_Count&0x3fffffff;
|
||||
if ((usbcb.u32_Count & 0xc0000000) == 0)
|
||||
{
|
||||
|
@ -665,6 +672,8 @@ void GScanO400Android::usbmain()
|
|||
//m_pImages->setscanflags(false);
|
||||
//std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
|
||||
if (is_first_error)
|
||||
image_last = false;
|
||||
break;
|
||||
}
|
||||
case COUNT_MODE:
|
||||
|
|
|
@ -17,6 +17,7 @@ public:
|
|||
virtual std::string GetSerialNum() override;
|
||||
virtual std::uint32_t GetMotorFPGA() override;
|
||||
virtual std::uint32_t GetScanFPGA() override;
|
||||
virtual std::string GetMacAdder() override;
|
||||
virtual bool is_scan() override;
|
||||
virtual BOOL Get_Scanner_PaperOn() override;
|
||||
virtual int Get_Roller_num() override;
|
||||
|
|
|
@ -190,6 +190,19 @@ enum Scanner_Reg_Defs
|
|||
SR_GET_SCANN_NUM,
|
||||
SR_CLR_ROLLER_NUM,
|
||||
SR_GET_ROLLER_NUM,
|
||||
SR_CLR_SCANN_NUM,
|
||||
SR_GET_H_200_RATIO,
|
||||
SR_SET_H_200_RATIO,
|
||||
SR_GET_V_200_RATIO,
|
||||
SR_SET_V_200_RATIO,
|
||||
SR_GET_H_300_RATIO,
|
||||
SR_SET_H_300_RATIO,
|
||||
SR_GET_V_300_RATIO,
|
||||
SR_SET_V_300_RATIO,
|
||||
SR_GET_H_600_RATIO,
|
||||
SR_SET_H_600_RATIO,
|
||||
SR_GET_V_600_RATIO,
|
||||
SR_SET_V_600_RATIO,
|
||||
SR_UPDATA_START = 0x100,
|
||||
SR_UPDATA_STAUTUS = 0x101,
|
||||
SR_UPDATA_MD5_RELUST = 0x102,
|
||||
|
@ -292,7 +305,8 @@ typedef union HG_ScanConfig
|
|||
unsigned int screw_detect_level : 3;//µÚÊ®ËÄλ
|
||||
unsigned int iscorrect_mod : 1;
|
||||
unsigned int is_autopaper : 1;
|
||||
unsigned int unused_one : 4;
|
||||
unsigned int is_textcorrect : 1;
|
||||
unsigned int unused_one : 3;
|
||||
unsigned int pc_correct : 1;
|
||||
unsigned int enable_sizecheck : 1;
|
||||
unsigned int enabledsp_cache : 1;
|
||||
|
|
|
@ -139,8 +139,10 @@ bool ImageMatQueue::valid()
|
|||
|
||||
void ImageMatQueue::clear()
|
||||
{
|
||||
if(m_rawBuffs.Size()>0)
|
||||
m_rawBuffs.Clear();
|
||||
clear_cachefiles();
|
||||
if (m_imagedata.Size() > 0)
|
||||
m_imagedata.Clear();
|
||||
atm_orgin_image_remains = 0;
|
||||
}
|
||||
|
@ -232,7 +234,9 @@ void ImageMatQueue::setparam(const GScanCap& param)
|
|||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyResize(CImageApplyResize::ResizeType::DSIZE, cv::Size(fixedSize.cx, fixedSize.cy), 1.0, 1.0)));*/
|
||||
}
|
||||
|
||||
|
||||
if (param.fadeback && param.pixtype == 2) {
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyFadeBackGroudColor(100,0,param.fadeback_range)));
|
||||
}
|
||||
//filter 0 r 1 g 2 b 3 none enhance color 0 none 1 r 2 g 3 b
|
||||
if (param.filter != 3 || param.enhance_color) {
|
||||
int channel = 0; //filter none r g b enhance none r g b
|
||||
|
@ -320,6 +324,8 @@ void ImageMatQueue::setparam(const GScanCap& param)
|
|||
_tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata"));
|
||||
#elif defined HANVON
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata"));
|
||||
#elif defined MAKERIGHTWAY
|
||||
_tcscat(szIniFile, _T("\\twain_32\\RIGHTWAYSCAN\\tessdata\\osd.traineddata"));
|
||||
#else
|
||||
_tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata"));
|
||||
#endif //
|
||||
|
@ -492,6 +498,10 @@ void ImageMatQueue::proc()
|
|||
sw.reset();
|
||||
if (!imgfront.empty() && !imgback.empty())
|
||||
{
|
||||
if (scanParam.imageRotateDegree != 0.0 && scanParam.imageRotateDegree != 180.0) {
|
||||
cv::flip(imgback, imgback, 0);
|
||||
cv::flip(imgback, imgback, 1);
|
||||
}
|
||||
mats.push_back(scanParam.is_switchfrontback ? imgback : imgfront);
|
||||
mats.push_back(scanParam.is_switchfrontback ? imgfront : imgback);
|
||||
remove(info.path.c_str());
|
||||
|
@ -526,15 +536,16 @@ void ImageMatQueue::proc()
|
|||
{
|
||||
Mat front = mat(Rect(0, 0, mat.cols / 2, mat.rows-10));//避免图像尾部出现无效数据丢弃10行数据
|
||||
Mat back = mat(Rect(mat.cols / 2, 0, mat.cols / 2, mat.rows-10));//避免图像尾部出现无效数据丢弃10行数据
|
||||
if (scanParam.imageRotateDegree != 0.0 && scanParam.imageRotateDegree != 180.0) {
|
||||
cv::flip(front, front, 0);
|
||||
cv::flip(front, front, 1);
|
||||
}
|
||||
#ifdef UV
|
||||
mats.push_back(scanParam.is_switchfrontback ? front : back);
|
||||
mats.push_back(scanParam.is_switchfrontback ? back : front);
|
||||
#else
|
||||
|
||||
if (scanParam.imageRotateDegree != 0.0 && scanParam.imageRotateDegree != 180.0) {
|
||||
cv::flip(front, front, 0);
|
||||
cv::flip(front, front, 1);
|
||||
}
|
||||
|
||||
mats.push_back(scanParam.is_switchfrontback ? front : back);
|
||||
mats.push_back(scanParam.is_switchfrontback ? back : front);
|
||||
#endif
|
||||
|
@ -556,6 +567,10 @@ void ImageMatQueue::proc()
|
|||
{
|
||||
Mat front = matuv(Rect(0, 0, mat.cols / 2, mat.rows));
|
||||
Mat back = matuv(Rect(mat.cols / 2, 0, mat.cols / 2, mat.rows));
|
||||
if (scanParam.imageRotateDegree != 0.0 && scanParam.imageRotateDegree != 180.0) {
|
||||
cv::flip(front, front, 0);
|
||||
cv::flip(front, front, 1);
|
||||
}
|
||||
uvmats.push_back(scanParam.is_switchfrontback ? front : back);
|
||||
uvmats.push_back(scanParam.is_switchfrontback ? back : front);
|
||||
front.release();
|
||||
|
@ -605,7 +620,6 @@ void ImageMatQueue::proc()
|
|||
#endif
|
||||
if (!scanParam.is_duplex && mats.size()>1) {
|
||||
mats.pop_back();
|
||||
break;
|
||||
}
|
||||
if (scanParam.is_split)
|
||||
{
|
||||
|
@ -668,17 +682,21 @@ void ImageMatQueue::proc()
|
|||
}
|
||||
|
||||
void ImageMatQueue::splitimg(std::vector<cv::Mat>& mats) {
|
||||
CImageApplyRotation autotext(CImageApplyRotation::RotationType::Rotate_90_clockwise, true, scanParam.resolution_dst, NULL);
|
||||
autotext.apply(mats, true);
|
||||
CImageApplySplit m_split;
|
||||
std::vector<cv::Mat> tmp;
|
||||
for (auto& var : mats){
|
||||
if (!var.empty()){
|
||||
auto sptmp = m_split.apply(var);
|
||||
for (int i = 0; i < mats.size();i++) {
|
||||
if (!mats[i].empty()){
|
||||
auto sptmp = m_split.apply(mats[i],i);
|
||||
for (auto& matvar : sptmp){
|
||||
if (!matvar.empty())
|
||||
tmp.push_back(matvar);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tmp.size() >= 2)
|
||||
std::swap(tmp[0], tmp[1]);
|
||||
mats.swap(tmp);
|
||||
}
|
||||
|
||||
|
|
|
@ -467,6 +467,8 @@ CString GetHidedlgPath()
|
|||
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\hidedlg.exe"));
|
||||
#elif defined LANXUM
|
||||
_tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\hidedlg.exe"));
|
||||
#elif defined MAKERIGHTWAY
|
||||
_tcscat(szIniFile, _T("\\twain_32\\RIGHTWAYSCAN\\hidedlg.exe"));
|
||||
#else // MAKEHUAGAO
|
||||
_tcscat(szIniFile, _T("\\twain_32\\ZhibenScan\\hidedlg.exe"));
|
||||
#endif
|
||||
|
|
|
@ -65,6 +65,8 @@ const std::string OUTHOLE = "bOutHole";
|
|||
const std::string OUTHOLERATIO = "iOutHoleRatio";
|
||||
const std::string DETACHNOISE = "detachnoise";
|
||||
const std::string DETACHNOISEVALUE = "detachnoisevalue";
|
||||
const std::string FADEBACK = "bfadeback";
|
||||
const std::string FADEBACKRANGE = "fadebackvalue";
|
||||
const std::string HSVCORRECT = "bHsvCorrect";
|
||||
|
||||
//<!送纸选项卡
|
||||
|
@ -243,6 +245,8 @@ struct GScanCap
|
|||
float contrast; /**< Contrast */
|
||||
float brightness; /**< Brightness */
|
||||
float threshold; /**< Threshold */
|
||||
bool fadeback; /**< ³ýµ×É«*/
|
||||
int fadeback_range; /**< ³ýµ×É«·¶Î§*/
|
||||
uint8_t is_autocontrast; /**< 自动对比度*/
|
||||
uint8_t is_autocrop; /**< 自动裁切*/
|
||||
bool normalCrop; /**<传统模式自动裁切*/
|
||||
|
@ -345,6 +349,8 @@ struct GScanCap_3399
|
|||
MultiOutput multiOutput; /**< 多流输出>*/
|
||||
bool normalCrop; /**< 自动裁切深色样张>*/
|
||||
uint32_t dogeardistabce; /**< 折角检测理论顶点到实际轮廓最新距离>*/
|
||||
bool fadeback; /**< ³ýµ×É«>*/
|
||||
int fadebackrange; /**< ³ýµ×É«·¶Î§>*/
|
||||
uint32_t reserve[1024]; /**< 预留4096字节做协议扩展*/
|
||||
};
|
||||
|
||||
|
|
|
@ -124,6 +124,8 @@ void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::strin
|
|||
outJson["Config"].Add(OUTHOLERATIO, (int)(gcap.fillhole.fillholeratio));
|
||||
outJson["Config"].Add(DETACHNOISE, (bool)(gcap.detachnoise.is_detachnoise), false);
|
||||
outJson["Config"].Add(DETACHNOISEVALUE, (int)(gcap.detachnoise.detachnoise));
|
||||
outJson["Config"].Add(FADEBACK, (bool)(gcap.fadeback), false);
|
||||
outJson["Config"].Add(FADEBACKRANGE, (int)(gcap.fadeback_range));
|
||||
outJson["Config"].Add(HSVCORRECT, (bool)(gcap.hsvcorrect),false);
|
||||
|
||||
outJson["Config"].Add(ULTRADETECT, (bool)(gcap.hardwarecaps.en_doublefeed), false);
|
||||
|
@ -175,6 +177,8 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
|
|||
root["Config"].AddEmptySubArray(SWITCHFRONTBACK);
|
||||
root["Config"].AddEmptySubArray(DETACHNOISE);
|
||||
root["Config"].AddEmptySubArray(DETACHNOISEVALUE);
|
||||
root["Config"].AddEmptySubArray(FADEBACK);
|
||||
root["Config"].AddEmptySubArray(FADEBACKRANGE);
|
||||
/*< brightness setting*/
|
||||
root["Config"].AddEmptySubArray(BRIGHTNESS);
|
||||
root["Config"].AddEmptySubArray(AUTOCONTRAST);
|
||||
|
@ -248,6 +252,8 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
|
|||
root["Config"][OUTHOLERATIO].Add((int)cfgArray[i].fillhole.fillholeratio);
|
||||
root["Config"][DETACHNOISE].Add(i, (bool)cfgArray[i].detachnoise.is_detachnoise);
|
||||
root["Config"][DETACHNOISEVALUE].Add((int)cfgArray[i].detachnoise.detachnoise);
|
||||
root["Config"][FADEBACK].Add(i, (bool)cfgArray[i].fadeback);
|
||||
root["Config"][FADEBACKRANGE].Add((int)cfgArray[i].fadeback_range);
|
||||
root["Config"][HSVCORRECT].Add(i, (bool)cfgArray[i].hsvcorrect);
|
||||
|
||||
root["Config"][ULTRADETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_doublefeed);
|
||||
|
@ -433,6 +439,11 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
|||
root["Config"].Get(DETACHNOISE, itmDetachNoise);
|
||||
neb::CJsonObject itmDetachNoiseValue;
|
||||
root["Config"].Get(DETACHNOISEVALUE, itmDetachNoiseValue);
|
||||
|
||||
neb::CJsonObject itmFadeBack;
|
||||
root["Config"].Get(FADEBACK, itmFadeBack);
|
||||
neb::CJsonObject itmFadeBackValue;
|
||||
root["Config"].Get(FADEBACKRANGE, itmFadeBackValue);
|
||||
neb::CJsonObject itmHsvCorrect;
|
||||
root["Config"].Get(HSVCORRECT, itmHsvCorrect);
|
||||
|
||||
|
@ -523,8 +534,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
|||
itmEnUV.Get(i, b_value);
|
||||
cfp.hardwarecaps.en_uv = b_value ? 1 : 0;
|
||||
#endif
|
||||
itmBrtnes.Get(i, f_value);
|
||||
cfp.brightness = f_value;
|
||||
itmBrtnes.Get(i, i_value);
|
||||
cfp.brightness = i_value;
|
||||
itmAutoCrnt.Get(i, b_value);
|
||||
cfp.is_autocontrast = b_value ? 1 : 0;
|
||||
itmContrast.Get(i, i_value);
|
||||
|
@ -552,6 +563,10 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
|||
cfp.detachnoise.is_detachnoise = b_value ? 1 : 0;
|
||||
itmDetachNoiseValue.Get(i, i_value);
|
||||
cfp.detachnoise.detachnoise = i_value;
|
||||
itmFadeBack.Get(i, b_value);
|
||||
cfp.fadeback = b_value ? 1 : 0;
|
||||
itmFadeBackValue.Get(i, i_value);
|
||||
cfp.fadeback_range = i_value;
|
||||
itmHsvCorrect.Get(i, b_value);
|
||||
cfp.hsvcorrect = b_value ? 1 : 0;
|
||||
|
||||
|
@ -671,6 +686,10 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
|||
cfp.detachnoise.is_detachnoise = bvalue ? 1 : 0;
|
||||
root["Config"].Get(DETACHNOISEVALUE, index);
|
||||
cfp.detachnoise.detachnoise = index;
|
||||
root["Config"].Get(FADEBACK, bvalue);
|
||||
cfp.fadeback = bvalue ? 1 : 0;
|
||||
root["Config"].Get(FADEBACKRANGE, index);
|
||||
cfp.fadeback_range = index;
|
||||
root["Config"].Get(HSVCORRECT, bvalue);
|
||||
cfp.hsvcorrect = bvalue ? 1 : 0;
|
||||
root["Config"].Get(NOISE, index);
|
||||
|
@ -762,6 +781,8 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
|
|||
#endif
|
||||
js[CONFIG][DETACHNOISE] = cap.detachnoise.is_detachnoise;
|
||||
js[CONFIG][DETACHNOISEVALUE] = cap.detachnoise.detachnoise;
|
||||
js[CONFIG][FADEBACK] = cap.fadeback;
|
||||
js[CONFIG][FADEBACKRANGE] = cap.fadeback_range;
|
||||
js[CONFIG][BRIGHTNESS] = cap.brightness;
|
||||
js[CONFIG][AUTOCONTRAST] = cap.is_autocontrast;
|
||||
js[CONFIG][CONTRAST] = cap.contrast;
|
||||
|
@ -824,6 +845,9 @@ GScanCap GscanJsonConfig::JsonToGscancap(json& js)
|
|||
cap.normalCrop = json_cast(js[CONFIG][CROPMODEL]).to_bool();
|
||||
cap.detachnoise.is_detachnoise = json_cast(js[CONFIG][DETACHNOISE]).to_int();
|
||||
cap.detachnoise.detachnoise = json_cast(js[CONFIG][DETACHNOISEVALUE]).to_int();
|
||||
|
||||
cap.fadeback = json_cast(js[CONFIG][FADEBACK]).to_bool();
|
||||
cap.fadeback_range = json_cast(js[CONFIG][FADEBACKRANGE]).to_int();
|
||||
cap.brightness = json_cast(js[CONFIG][BRIGHTNESS]).to_float();
|
||||
cap.is_autocontrast = json_cast(js[CONFIG][AUTOCONTRAST]).to_int();
|
||||
cap.contrast = json_cast(js[CONFIG][CONTRAST]).to_float();
|
||||
|
@ -881,6 +905,8 @@ json GscanJsonConfig::GetDefaultJson()
|
|||
"bUVmodel": false,
|
||||
"detachnoise": false ,
|
||||
"detachnoisevalue": 30 ,
|
||||
"bfadeback": false ,
|
||||
"fadebackvalue": 40,
|
||||
"iBrightness": 0 ,
|
||||
"bAutoContrast": false ,
|
||||
"iContrast": 0 ,
|
||||
|
@ -935,6 +961,8 @@ json GscanJsonConfig::GetDefaultJson()
|
|||
"bSplit": false ,
|
||||
"detachnoise": false ,
|
||||
"detachnoisevalue": 30 ,
|
||||
"bfadeback": false ,
|
||||
"fadebackvalue": 40,
|
||||
"iBrightness": 0 ,
|
||||
"bAutoContrast": false ,
|
||||
"iContrast": 0 ,
|
||||
|
|
|
@ -19,4 +19,5 @@
|
|||
#include "ImageApplyColorRecognition.h"
|
||||
#include "ImageApplyUV.h"
|
||||
#include "ImageApplySplit.h"
|
||||
#include "ImageApplyFadeBackGroundColor.h"
|
||||
#endif
|
||||
|
|
|
@ -72,4 +72,3 @@ private:
|
|||
};
|
||||
|
||||
#endif // !IMAGE_APPLY_OUT_HOLE_H
|
||||
|
||||
|
|
|
@ -10,27 +10,31 @@ CImageApplySplit::~CImageApplySplit(void)
|
|||
}
|
||||
|
||||
|
||||
std::vector<cv::Mat> CImageApplySplit::apply(cv::Mat& pDib)
|
||||
std::vector<cv::Mat> CImageApplySplit::apply(cv::Mat& pDib,int side)
|
||||
{
|
||||
if (pDib.empty())
|
||||
return std::vector<cv::Mat>();
|
||||
std::vector<cv::Mat> retMats;
|
||||
int heigth = pDib.rows;
|
||||
int width = pDib.cols;
|
||||
cv::Mat matF,matB,temp;
|
||||
if (heigth > width)
|
||||
{
|
||||
cv::Mat matF = pDib(cv::Rect(0, 0, width, (int)(0.5 * heigth)));
|
||||
cv::Mat matB = pDib(cv::Rect(0, (int)(0.5 * heigth), width, (int)(0.5 * heigth)));
|
||||
retMats.push_back(matF);
|
||||
retMats.push_back(matB);
|
||||
matF = pDib(cv::Rect(0, 0, width, (int)(0.5 * heigth)));
|
||||
matB = pDib(cv::Rect(0, (int)(0.5 * heigth), width, (int)(0.5 * heigth)));
|
||||
}
|
||||
else
|
||||
{
|
||||
cv::Mat matF = pDib(cv::Rect(0, 0, (int)(width*0.5), heigth));
|
||||
cv::Mat matB = pDib(cv::Rect((int)(width*0.5), 0, (int)(width * 0.5), heigth));
|
||||
matF = pDib(cv::Rect(0, 0, (int)(width*0.5), heigth));
|
||||
matB = pDib(cv::Rect((int)(width*0.5), 0, (int)(width * 0.5), heigth));
|
||||
}
|
||||
retMats.push_back(matF);
|
||||
retMats.push_back(matB);
|
||||
}
|
||||
//for (int i = 0; i < retMats.size(); i++) {
|
||||
// cv::flip(retMats[i], retMats[i], 0);
|
||||
// cv::flip(retMats[i], retMats[i], 1);
|
||||
//
|
||||
//}
|
||||
return retMats;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ public:
|
|||
|
||||
~CImageApplySplit(void);
|
||||
|
||||
std::vector<cv::Mat> apply(cv::Mat& pDib);
|
||||
std::vector<cv::Mat> apply(cv::Mat& pDib,int side);
|
||||
};
|
||||
|
||||
#endif // !IMAGE_APPLY_SPLIT_H
|
||||
|
|
|
@ -62,6 +62,8 @@ enum class CapTypeEx : unsigned short {
|
|||
TwEx_CropModel=0x8106,
|
||||
TwEx_DogEarDistance = 0x8107,
|
||||
TwEx_ImageSplit = 0x8108,
|
||||
TwEx_IFadeBack = 0x8109,
|
||||
TwEx_IFadeBackValue = 0x8110,
|
||||
};
|
||||
|
||||
enum class PaperSizeEx : unsigned short {
|
||||
|
@ -99,6 +101,8 @@ static constexpr const Identity srcIdent(
|
|||
"AUGE",
|
||||
#elif defined LANXUM
|
||||
"LANXUM",
|
||||
#elif defined MAKERIGHTWAY
|
||||
"RIGHTWAY",
|
||||
#else // MAKEHUAGAO
|
||||
"ZHIBEN",
|
||||
#endif
|
||||
|
@ -172,7 +176,8 @@ static constexpr const Identity srcIdent(
|
|||
#else
|
||||
"HUAGOSCAN G300 TWAIN"// 兼容旧极课 pm changed "HUAGOSCAN G300 TWAIN"
|
||||
#endif
|
||||
|
||||
#elif defined UV && defined MAKERIGHTWAY
|
||||
"RIGHTWAYSCAN G300 TWAIN"
|
||||
#elif defined HANVON
|
||||
"HANVONSCAN HW-7000W TAWIN"
|
||||
|
||||
|
@ -322,7 +327,7 @@ static std::vector<Vid_pid> DeviceID{
|
|||
{0x3072,0x200},
|
||||
#endif // ISG100
|
||||
#elif defined G300
|
||||
{0x3072,0x0300}
|
||||
{0x3072,0x0300},
|
||||
#elif defined G400
|
||||
{0x3072,0x400},
|
||||
#endif // ISG100
|
||||
|
@ -410,6 +415,17 @@ void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
|
|||
if(!m_scanparam->en_fold)
|
||||
imgread /= 2;
|
||||
}
|
||||
if (retcode == 200)
|
||||
{
|
||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||
{
|
||||
text += "请检查实际过纸张数!\n扫描统计信息:\n进纸(张)--\n扫描(张)" + to_string(imgread) + "\n扫描相差(张)--\n上传(页)"
|
||||
+ to_string(scanner->get_imgTransfered()) + "\n上传相差(页)" + to_string(num - scanner->get_imgTransfered());
|
||||
scanner->set_lose_image_num(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||
{
|
||||
text += "\n扫描统计信息:\n进纸(张)" + to_string(scanner->get_scannum()) +
|
||||
|
@ -418,6 +434,7 @@ void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
|
|||
scanner->set_lose_image_num(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString((text + " " + caption).c_str()), NULL, SW_HIDE);
|
||||
}
|
||||
|
||||
|
@ -866,7 +883,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
FileTools::writelog(log_INFO, "open ds find device vid=" + to_string(vid) + "\tpid=" + to_string(pid));
|
||||
if (vid == 0 || pid == 0)
|
||||
{
|
||||
|
@ -1041,17 +1057,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
}
|
||||
else{
|
||||
m_scanparam->multi_output_red = 0;//非彩色模式下多流输出不可用
|
||||
//if (m_scanparam->pixtype == (int)PixelType::BlackWhite)
|
||||
// m_scanparam->sharpen = SharpenBlur::Sharpen_None;
|
||||
|
||||
//if (m_scanparam->pixtype == (int)PixelType::BlackWhite)
|
||||
//{
|
||||
// if (m_scanparam->filter == 3 && m_scanparam->enhance_color == 0)
|
||||
// {
|
||||
// m_scanparam->filter = (BYTE)Filter::None;
|
||||
// m_scanparam->enhance_color = (BYTE)Enchace_Color::Enhance_Red;
|
||||
// }
|
||||
//}
|
||||
m_scanparam->detachnoise.is_detachnoise = false;
|
||||
m_scanparam->fadeback = false;
|
||||
}
|
||||
m_iBitdepth = mech == PixelType::Rgb ? 24 : (mech == PixelType::Gray ? 8 : 1);
|
||||
return success();
|
||||
|
@ -1701,6 +1708,33 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
}
|
||||
return CapSupGetAllResetEx<int, Int32, (CapType)CapTypeEx::TwEx_IDetachNoiseValue>(msg, data, m_scanparam->detachnoise.detachnoise, 10);
|
||||
};
|
||||
//背景移除
|
||||
m_query[(CapType)(CapTypeEx::TwEx_IFadeBack)] = msgSupportGetAllSetReset;
|
||||
m_caps[(CapType)(CapTypeEx::TwEx_IFadeBack)] = [this](Msg msg, Capability& data)->Result {
|
||||
CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IFadeBack), msg == Msg::Set ? to_string((int)data.currentItem<Bool>()) : "");
|
||||
if (Msg::Set == msg) {
|
||||
if (m_scanparam->pixtype != 2)
|
||||
return badValue();
|
||||
auto mech = data.currentItem<Bool>();
|
||||
m_scanparam->fadeback = mech;
|
||||
return success();
|
||||
}
|
||||
return CapSupGetAllResetEx<bool, Bool, (CapType)CapTypeEx::TwEx_IFadeBack>(msg, data, m_scanparam->fadeback, false);
|
||||
};
|
||||
|
||||
m_query[(CapType)(CapTypeEx::TwEx_IFadeBackValue)] = msgSupportGetAllSetReset;
|
||||
m_caps[(CapType)(CapTypeEx::TwEx_IFadeBackValue)] = [this](Msg msg, Capability& data)->Result {
|
||||
CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IFadeBackValue), msg == Msg::Set ? to_string((int)data.currentItem<Int32>()) : "");
|
||||
if (Msg::Set == msg) {
|
||||
auto mech = data.currentItem<Int32>();
|
||||
if (mech > 0 && mech < 129) {
|
||||
m_scanparam->fadeback_range = (int)mech;
|
||||
return success();
|
||||
}
|
||||
return badValue();
|
||||
}
|
||||
return CapSupGetAllResetEx<int, Int32, (CapType)CapTypeEx::TwEx_IFadeBackValue>(msg, data, m_scanparam->fadeback_range, 40);
|
||||
};
|
||||
//多流除红
|
||||
m_query[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = msgSupportGetAllSetReset;
|
||||
m_caps[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = [this](Msg msg, Capability& data)->Result {
|
||||
|
@ -2093,9 +2127,9 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
|
|||
guiIndicator->ShowWindow(SW_HIDE);
|
||||
if (ret != -1) {
|
||||
int index = scanner->geterrorindex();
|
||||
if (ret == 82)
|
||||
if (ret == 82 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
|
||||
showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", ret);
|
||||
else if(ret==75)
|
||||
else if(ret==75 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
|
||||
showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", ret);
|
||||
else
|
||||
showmsg("提示", msgs[(UsbSupported)ret], ret);
|
||||
|
@ -2139,7 +2173,7 @@ Result HuagaoDs::pendingXfersReset(const Identity&, PendingXfers& data) {
|
|||
if (scanner.get())
|
||||
{
|
||||
scanner->Stop_scan();
|
||||
scanner->reset();
|
||||
//scanner->reset();
|
||||
scanner->ResetScanner();
|
||||
}
|
||||
//guiIndicator.reset();
|
||||
|
@ -2364,7 +2398,6 @@ Result HuagaoDs::imageNativeXferGet(const Identity& id, ImageNativeXfer& data) {
|
|||
data = ImageNativeXfer(bmpSize());
|
||||
std::copy(bmpBegin(), bmpEnd(), data.data<char>().data());
|
||||
bmpData.reset(new std::vector<unsigned char>);
|
||||
|
||||
//FileTools::write_log("正在上传图片 ===> Twain transfered num of " + to_string(++xtfer) + " images");
|
||||
FileTools::writelog(log_INFO, "正在上传图片 ===> Twain transfered num of " + to_string(++xtfer) + " images");
|
||||
return { ReturnCode::XferDone, ConditionCode::Success };
|
||||
|
@ -2551,8 +2584,9 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
|
|||
TwGlue glueUiOnly = { confirmFunction, cancelFunction };
|
||||
std::string serialnum = scanner->GetSerialNum();
|
||||
std::string hardwareversion = scanner->GetFWVersion();
|
||||
std::string macadder = scanner->GetMacAdder();
|
||||
uint32_t mbversion = scanner->GetMotorFPGA();
|
||||
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "È·¶¨" : "ɨÃè", hardwareversion, serialnum,mbversion));
|
||||
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum,macadder,mbversion));
|
||||
guiTwain->Create(IDD_TWAINUI, parent);
|
||||
CRect newRect;
|
||||
::GetWindowRect(static_cast<HWND>(ui.parent().raw()), &newRect);
|
||||
|
@ -2678,9 +2712,47 @@ Twpp::Result HuagaoDs::startScan()
|
|||
config.setrollermsgdata(chrono::duration_cast<chrono::duration<int, ratio<24 * 60 * 60>>>(chrono::system_clock::now().time_since_epoch()).count());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//m_scanparam->brightness = -142;
|
||||
//m_scanparam->contrast = 1000; // 小闲专用
|
||||
scanner->config_params(*m_scanparam);
|
||||
std::string info = "papertype= " + to_string(m_scanparam->papertype) +
|
||||
"\nAutoCrop_threshold= " + to_string(m_scanparam->AutoCrop_threshold) +
|
||||
"\nautodescrew = " + to_string(m_scanparam->autodescrew) +
|
||||
"\nautomaticcolor= " + to_string(m_scanparam->automaticcolor) +
|
||||
"\nbrightness = " + to_string(m_scanparam->brightness) +
|
||||
"\ncontrast = " + to_string(m_scanparam->contrast) +
|
||||
"\nis_detachnoise = " + to_string(m_scanparam->detachnoise.is_detachnoise) +
|
||||
"\ndetachnoise = " + to_string(m_scanparam->detachnoise.detachnoise) +
|
||||
"\nen_fold = " + to_string(m_scanparam->en_fold) +
|
||||
"\nen_sizecheck = " + to_string(m_scanparam->en_sizecheck) +
|
||||
"\nenhance_color = " + to_string(m_scanparam->enhance_color) +
|
||||
"\nfillbackground = " + to_string(m_scanparam->fillbackground) +
|
||||
"\nfilter = " + to_string(m_scanparam->filter) +
|
||||
"\nis_fillhole = " + to_string(m_scanparam->fillhole.is_fillhole) +
|
||||
"\ngamma = " + to_string(m_scanparam->gamma) +
|
||||
"\ncapturepixtype = " + to_string(m_scanparam->hardwarecaps.capturepixtype) +
|
||||
"\nen_doublefeed = " + to_string(m_scanparam->hardwarecaps.en_doublefeed) +
|
||||
"\nhsvcorrect = " + to_string(m_scanparam->hsvcorrect) +
|
||||
"\nimageRotateDegree = " + to_string(m_scanparam->imageRotateDegree) +
|
||||
"\nindent = " + to_string(m_scanparam->indent) +
|
||||
"\nis_autocontrast = " + to_string(m_scanparam->is_autocontrast) +
|
||||
"\nis_autocrop = " + to_string(m_scanparam->is_autocrop) +
|
||||
"\nis_autocontrast = " + to_string(m_scanparam->is_autocontrast) +
|
||||
"\nis_autodiscradblank_normal = " + to_string(m_scanparam->is_autodiscradblank_normal) +
|
||||
"\nis_autodiscradblank_vince = " + to_string(m_scanparam->is_autodiscradblank_vince) +
|
||||
"\nis_autotext = " + to_string(m_scanparam->is_autotext) +
|
||||
"\nis_convex = " + to_string(m_scanparam->is_convex) +
|
||||
"\nis_duplex = " + to_string(m_scanparam->is_duplex) +
|
||||
"\nis_switchfrontback = " + to_string(m_scanparam->is_switchfrontback) +
|
||||
"\nis_dogeardetection = " + to_string(m_scanparam->is_dogeardetection) +
|
||||
"\nmulti_output_red = " + to_string(m_scanparam->multi_output_red) +
|
||||
"\nnoise = " + to_string(m_scanparam->noise) +
|
||||
"\npaperAlign = " + to_string(m_scanparam->paperAlign) +
|
||||
"\npixtype = " + to_string(m_scanparam->pixtype) +
|
||||
"\nresolution_dst = " + to_string(m_scanparam->resolution_dst) +
|
||||
"\nscannum = " + to_string(m_scanparam->scannum) +
|
||||
"\nsharpen = " + to_string(m_scanparam->sharpen);
|
||||
FileTools::writelog(log_TRACE,info);
|
||||
|
||||
if (m_bIndicator) {
|
||||
//!< cancel button push
|
||||
|
@ -2723,9 +2795,9 @@ Twpp::Result HuagaoDs::startScan()
|
|||
m_haveError = true;
|
||||
//ShellExecute(guiTwain ? guiTwain->m_hWnd : NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE);
|
||||
int index = scanner->geterrorindex();
|
||||
if (retCode == 82)
|
||||
if (retCode == 82 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
|
||||
showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", retCode);
|
||||
else if (retCode == 75)
|
||||
else if (retCode == 75 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
|
||||
showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", retCode);
|
||||
else
|
||||
showmsg("提示", msgs[(UsbSupported)retCode], retCode);
|
||||
|
|
Binary file not shown.
Binary file not shown.
BIN
huagao/stdafx.h
BIN
huagao/stdafx.h
Binary file not shown.
Loading…
Reference in New Issue