修复安卓机器usb连接断开卡死问题

This commit is contained in:
masayume 2022-02-14 10:30:19 +08:00
parent 86fc897645
commit 1e8d06e002
31 changed files with 369 additions and 112 deletions

View File

@ -19,3 +19,13 @@
5.根据arm固件进行兼容以A1209为分界线根据版本显示连续扫描 5.根据arm固件进行兼容以A1209为分界线根据版本显示连续扫描
6.屏蔽对折前旋转,奥鸽要求 6.屏蔽对折前旋转,奥鸽要求
7.修复首选项保存时亮度读取异常问题 7.修复首选项保存时亮度读取异常问题
8.修复scsanner reset时判断条件错误问题
9.针对usb连接异常屏蔽显示扫描纸张速度等
10.修复安卓首张异常时的版本兼容问题
11.修复单面扫描不出图问题
12.更新穿孔算法
13.修复非3399设备尺寸检测索引错误问题
14.添加除底色功能
15.修复折角 尺寸取图超时问题
16.修复安卓机器usb连接断开卡死问题

View File

@ -11,10 +11,11 @@
IMPLEMENT_DYNAMIC(CAboutDlg, CDialogEx) 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) : CDialogEx(IDD_ABOUT, pParent)
,m_hardwareversion(hardwareversion) ,m_hardwareversion(hardwareversion)
,m_serialnum(serialnum) ,m_serialnum(serialnum)
,m_macadder(macadder)
{ {
} }
@ -44,10 +45,11 @@ BOOL CAboutDlg::OnInitDialog()
// TODO: 在此添加额外的初始化 // TODO: 在此添加额外的初始化
CString hardwareversion(m_hardwareversion.c_str()); CString hardwareversion(m_hardwareversion.c_str());
CString serialnum(m_serialnum.c_str()); CString serialnum(m_serialnum.c_str());
CString macadder(m_macadder.c_str());
SetDlgItemText(IDC_LBSCANNERNAMEVALUE, SCANNERNAME); SetDlgItemText(IDC_LBSCANNERNAMEVALUE, SCANNERNAME);
SetDlgItemText(IDC_LBHARDWAREVALUE, hardwareversion); SetDlgItemText(IDC_LBHARDWAREVALUE, hardwareversion);
SetDlgItemText(IDC_LBSERIALNUMVALUE, serialnum); SetDlgItemText(IDC_LBSERIALNUMVALUE, serialnum);
SetDlgItemText(IDC_LBTOTALSCANVALU, macadder);
SetDlgItemText(IDC_LBDERIVERVERSON, HG_VERSION_INFO); SetDlgItemText(IDC_LBDERIVERVERSON, HG_VERSION_INFO);
SetDlgItemText(IDC_LBCOMPANY, LIMIT_INFO); SetDlgItemText(IDC_LBCOMPANY, LIMIT_INFO);
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PICABOUTHUAGO); CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PICABOUTHUAGO);
@ -59,10 +61,12 @@ BOOL CAboutDlg::OnInitDialog()
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2)); HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2));
#elif defined AUGE #elif defined AUGE
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP4)); HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP4));
#elif defined MAKERIGHTWAY
HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP5));
#endif #endif
pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE); pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE);
pStatic->SetBitmap(hBitmap); 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); GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(TRUE);
#else #else
GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(FALSE); GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(FALSE);

View File

@ -8,7 +8,7 @@ class CAboutDlg : public CDialogEx
DECLARE_DYNAMIC(CAboutDlg) DECLARE_DYNAMIC(CAboutDlg)
public: 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(); virtual ~CAboutDlg();
// 对话框数据 // 对话框数据
@ -26,4 +26,5 @@ public:
private: private:
std::string m_hardwareversion; std::string m_hardwareversion;
std::string m_serialnum; std::string m_serialnum;
std::string m_macadder;
}; };

View File

@ -195,7 +195,7 @@ END_MESSAGE_MAP()
void CBasicPage::OnBnClickedBtnabout() void CBasicPage::OnBnClickedBtnabout()
{ {
CAboutDlg dlg(m_hdVersion, m_serialNum,this); CAboutDlg dlg(m_hdVersion, m_serialNum,m_macadder,this);
dlg.DoModal(); dlg.DoModal();
} }
@ -261,10 +261,11 @@ void CBasicPage::OnClickedBtndiscardsetting()
discardblank_percent = settingdlg.discardblank_percent; 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_hdVersion = hdVersion;
m_serialNum = serialNum; m_serialNum = serialNum;
m_macadder = macadder;
} }
void CBasicPage::updateCmbDuplex(BOOL insert) void CBasicPage::updateCmbDuplex(BOOL insert)

View File

@ -48,10 +48,11 @@ protected:
public: public:
BOOL m_bUV; BOOL m_bUV;
afx_msg void OnClickedBtndiscardsetting(); afx_msg void OnClickedBtndiscardsetting();
void SetScannerInfo(std::string hdVersion, std::string serialNum); void SetScannerInfo(std::string hdVersion, std::string serialNum,std::string macadder);
private: private:
std::string m_hdVersion; std::string m_hdVersion;
std::string m_serialNum; std::string m_serialNum;
std::string m_macadder;
public: public:
afx_msg void OnCbnSelchangeCblowpowermode(); afx_msg void OnCbnSelchangeCblowpowermode();
afx_msg void OnNMReleasedcaptureSliderdpi(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnNMReleasedcaptureSliderdpi(NMHDR* pNMHDR, LRESULT* pResult);

View File

@ -66,10 +66,15 @@ void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false); ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
} }
if (val == 0) if (val == 0)
{
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE); GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(TRUE);
}
else { else {
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE); GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE); ((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->SetCheck(FALSE);
} }
if (0 == val||val==3)//彩色 if (0 == val||val==3)//彩色
{ {
@ -83,6 +88,7 @@ void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool
m_temp->EnableWindow(TRUE); m_temp->EnableWindow(TRUE);
t_chMultiOutput->SetCheck(FALSE); t_chMultiOutput->SetCheck(FALSE);
t_chMultiOutput->EnableWindow(FALSE); t_chMultiOutput->EnableWindow(FALSE);
GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE);
} }
if (val == 2) 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_EDIT_HOLE, m_edit_hole);
DDX_Control(pDX, IDC_EDITDETACHNOISE, m_edit_detachnoise); DDX_Control(pDX, IDC_EDITDETACHNOISE, m_edit_detachnoise);
DDX_Control(pDX, IDC_SLIDERDETACHNOISE, m_slider_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_CMBFILTER, m_cmBoxFilter);
DDX_Control(pDX, IDC_CMBSHARPEN, m_cmBoxSharpen); 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_CKFILLBLACKRECT, m_ckbFillBlack);
DDX_Check(pDX, IDC_CKAUTODESKREW, m_ckbAutoDeskrew); DDX_Check(pDX, IDC_CKAUTODESKREW, m_ckbAutoDeskrew);
DDX_Check(pDX, IDC_CKMULTIOUTPUT, m_ckbMultioutput); 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.SetParams(0.01, 0.50, 10, _T("%0.2f"),20);
m_edit_hole.SetValue(0.10); 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.SetSlideLink(this, IDC_SLIDERDETACHNOISE);
m_edit_detachnoise.SetParams(10, 50, 10); m_edit_detachnoise.SetParams(10, 50, 10);
m_edit_detachnoise.SetValue(detachnoise); 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_CKFILLBLACKRECT, &CImageProcPage::OnBnClickedCkfillblackrect)
ON_BN_CLICKED(IDC_CKAUTODESKREW, &CImageProcPage::OnBnClickedCkautodeskrew) ON_BN_CLICKED(IDC_CKAUTODESKREW, &CImageProcPage::OnBnClickedCkautodeskrew)
ON_BN_CLICKED(IDC_CHECKDETACHNOISE, &CImageProcPage::OnBnClickedCheckdetachnoise) ON_BN_CLICKED(IDC_CHECKDETACHNOISE, &CImageProcPage::OnBnClickedCheckdetachnoise)
ON_BN_CLICKED(IDC_CKBACKGROUNDSMOOTH, &CImageProcPage::OnBnClickedCkbackgroundsmooth)
END_MESSAGE_MAP() END_MESSAGE_MAP()
void CImageProcPage::EnableOutHoleCheckChanged(BOOL enable) void CImageProcPage::EnableOutHoleCheckChanged(BOOL enable)
@ -282,3 +296,13 @@ void CImageProcPage::OnBnClickedCheckdetachnoise()
m_edit_detachnoise.EnableWindow(m_ckbDetachNoise); m_edit_detachnoise.EnableWindow(m_ckbDetachNoise);
m_slider_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);
}

View File

@ -19,8 +19,11 @@ public:
CSmartEdit m_edit_hole; CSmartEdit m_edit_hole;
CLinkSlider m_slider_detachnoise; CLinkSlider m_slider_detachnoise;
CSmartEdit m_edit_detachnoise; CSmartEdit m_edit_detachnoise;
CLinkSlider m_slider_faderange;
CSmartEdit m_edit_faderange;
CComboBox m_cmBoxFilter; CComboBox m_cmBoxFilter;
CComboBox m_cmBoxSharpen; CComboBox m_cmBoxSharpen;
BOOL m_ckbfadeback;
BOOL m_ckbFillBlack; BOOL m_ckbFillBlack;
BOOL m_ckbAutoDeskrew; BOOL m_ckbAutoDeskrew;
BOOL m_ckbMultioutput; BOOL m_ckbMultioutput;
@ -61,4 +64,5 @@ public:
afx_msg void OnBnClickedCkfillblackrect(); afx_msg void OnBnClickedCkfillblackrect();
afx_msg void OnBnClickedCkautodeskrew(); afx_msg void OnBnClickedCkautodeskrew();
afx_msg void OnBnClickedCheckdetachnoise(); afx_msg void OnBnClickedCheckdetachnoise();
afx_msg void OnBnClickedCkbackgroundsmooth();
}; };

View File

@ -17,7 +17,7 @@
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx) 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) : CDialogEx(IDD_TWAINUI, pParent)
, m_tabCtrl(new CTabCtrlSSL()) , m_tabCtrl(new CTabCtrlSSL())
, m_pageBrightness(new CBrightnessPage) , m_pageBrightness(new CBrightnessPage)
@ -30,14 +30,7 @@ CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::st
m_hardwareVersion = hardwareversion; m_hardwareVersion = hardwareversion;
m_serialnum = serialnum; m_serialnum = serialnum;
m_mbversion = mbversion; m_mbversion = mbversion;
//memset(settings.get(), 0, sizeof(GScanCap)); m_macadder = macadder;
/*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;*/
} }
CTwainUI::~CTwainUI() CTwainUI::~CTwainUI()
@ -74,7 +67,7 @@ BOOL CTwainUI::OnInitDialog()
m_pageBasic.reset(new CBasicPage(dataChangeFunction)); m_pageBasic.reset(new CBasicPage(dataChangeFunction));
m_pageBasic->Create(IDD_PAGEBASIC, this); m_pageBasic->Create(IDD_PAGEBASIC, this);
m_pageBasic->discardblank_percent = settings->discardblank_percent; 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_tabCtrl->AddSSLPage(_T("基本"), nPageID++, m_pageBasic.get());
m_pageBrightness->Create(IDD_PAGEBRIGHTNESS, this); m_pageBrightness->Create(IDD_PAGEBRIGHTNESS, this);
m_tabCtrl->AddSSLPage(_T("亮度"), nPageID++, m_pageBrightness.get()); 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.SetValue(settings->fillhole.fillholeratio/ 100.0);//穿孔搜索范围比例系数
m_pageImageProc->m_edit_hole.EnableWindow(settings->fillhole.is_fillhole == TRUE ? TRUE : FALSE); 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->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;//黑白降噪是否启用 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))->SetCheck(m_pageImageProc->m_ckbDetachNoise);
((CButton*)m_pageImageProc->GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(settings->pixtype != 2); ((CButton*)m_pageImageProc->GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(settings->pixtype != 2);
m_pageImageProc->m_edit_detachnoise.SetValue(settings->detachnoise.detachnoise); 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_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) if (settings->pixtype == 2)
m_pageImageProc->m_ckbMultioutput = settings->multi_output_red == TRUE ? TRUE : FALSE;//多流除红 m_pageImageProc->m_ckbMultioutput = settings->multi_output_red == TRUE ? TRUE : FALSE;//多流除红
else else
@ -572,6 +573,8 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
settings->hardwarecaps.capturepixtype = TWPT_RGB; settings->hardwarecaps.capturepixtype = TWPT_RGB;
settings->detachnoise.is_detachnoise = m_pageImageProc->m_ckbDetachNoise; settings->detachnoise.is_detachnoise = m_pageImageProc->m_ckbDetachNoise;
settings->detachnoise.detachnoise = m_pageImageProc->m_slider_detachnoise.m_iPosition; 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.is_fillhole = configItem->EnOutHole;
settings->fillhole.fillholeratio = configItem->OutHoleRatio; settings->fillhole.fillholeratio = configItem->OutHoleRatio;
settings->multi_output_red = configItem->EnMultiOutPutR; settings->multi_output_red = configItem->EnMultiOutPutR;

View File

@ -165,7 +165,7 @@ class CTwainUI : public CDialogEx
DECLARE_DYNAMIC(CTwainUI) DECLARE_DYNAMIC(CTwainUI)
public: 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(); virtual ~CTwainUI();
void UpdateUI(); void UpdateUI();
@ -185,6 +185,7 @@ public:
public: public:
std::string m_hardwareVersion; std::string m_hardwareVersion;
std::string m_serialnum; std::string m_serialnum;
std::string m_macadder;
std::uint32_t m_mbversion; std::uint32_t m_mbversion;
protected: protected:

View File

@ -107,8 +107,8 @@ static map<UsbSupported, string> msgs = {
{UsbSupported::NO_FEED,"无纸!请放置纸张!"}, {UsbSupported::NO_FEED,"无纸!请放置纸张!"},
{UsbSupported::FEED_IN_ERROR,"搓纸失败!请整理纸张!"}, {UsbSupported::FEED_IN_ERROR,"搓纸失败!请整理纸张!"},
{UsbSupported::PAPER_JAM,"卡纸!"}, {UsbSupported::PAPER_JAM,"卡纸!"},
{UsbSupported::DETECT_DOUBLE_FEED,"双张,请核对扫描试卷张数!"}, {UsbSupported::DETECT_DOUBLE_FEED,"双张,请核对扫描张数!"},
{UsbSupported::DETECT_STAPLE,"检测到订书!"}, {UsbSupported::DETECT_STAPLE,"检测到订书!"},
{UsbSupported::PAPER_SKEW,"纸张歪斜!请整理纸张!"}, {UsbSupported::PAPER_SKEW,"纸张歪斜!请整理纸张!"},
{UsbSupported::COUNT_MODE,"计数模式,请退出计数模式!"}, {UsbSupported::COUNT_MODE,"计数模式,请退出计数模式!"},
{UsbSupported::HARDWARE_ERROR,"硬件异常!请重启扫描仪!"}, {UsbSupported::HARDWARE_ERROR,"硬件异常!请重启扫描仪!"},
@ -234,6 +234,7 @@ public:
virtual BOOL IsConnected() = 0; virtual BOOL IsConnected() = 0;
virtual std::string GetFWVersion() = 0; virtual std::string GetFWVersion() = 0;
virtual std::string GetSerialNum() = 0; virtual std::string GetSerialNum() = 0;
virtual std::string GetMacAdder() = 0;
virtual std::uint32_t GetMotorFPGA() = 0; virtual std::uint32_t GetMotorFPGA() = 0;
virtual std::uint32_t GetScanFPGA() = 0; virtual std::uint32_t GetScanFPGA() = 0;
virtual bool is_scan() = 0; virtual bool is_scan() = 0;

View File

@ -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>()); im_data.reset(new std::vector<char>());
//open(0x3072, 0x139); //open(0x3072, 0x139);
@ -189,6 +189,22 @@ std::string GScanO1003399::GetFWVersion()
return fw; 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 GScanO1003399::GetSerialNum()
{ {
std::string sn; 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.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.is_autopaper = param.hardwarecaps.is_autopaper;
cfg.g200params.enable_sizecheck = param.en_sizecheck == 1 ? 1 : 0; 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 #else
@ -328,26 +344,9 @@ void GScanO1003399::config_params(GScanCap& param)
param39.threshold = param.threshold; param39.threshold = param.threshold;
param39.multiOutput = MultiOutput::Unused; param39.multiOutput = MultiOutput::Unused;
param39.normalCrop = param.normalCrop; param39.normalCrop = param.normalCrop;
param39.fadeback = param.fadeback;
param39.fadebackrange = param.fadeback_range;
m_usb->write_bulk(&param39, sizeof(param39)); m_usb->write_bulk(&param39, 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) void GScanO1003399::Scanner_StartScan(UINT16 count)
@ -363,6 +362,7 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
else else
is_kernelsnap_211209 = false; is_kernelsnap_211209 = false;
error_index = autopaperstop = 0; error_index = autopaperstop = 0;
is_back = false;
roller_num = this->count(); roller_num = this->count();
scanflag = true; scanflag = true;
while (m_paths.Size() > 0) while (m_paths.Size() > 0)
@ -381,13 +381,6 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
scanflag = false; scanflag = false;
return; return;
} }
if (scan_mode())
{
devState = DEV_WRONG;
Set_ErrorCode(COUNT_MODE);
scanflag = false;
return;
}
//if (!Get_Scanner_PaperOn()) //if (!Get_Scanner_PaperOn())
//{ //{
// devState = DEV_WRONG; // devState = DEV_WRONG;
@ -395,6 +388,13 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
// scanflag = false; // scanflag = false;
// return; // return;
//} //}
if (scan_mode())
{
devState = DEV_WRONG;
Set_ErrorCode(COUNT_MODE);
scanflag = false;
return;
}
start(); start();
bool procmode = (m_param.resolution_dst > 200.0f || m_param.papertype == 52 || m_param.papertype == 54 || m_param.papertype == 131); 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; b_imgprothread = false;
m_imgprocthread->join(); m_imgprocthread->join();
} }
preProcImgindex = 0;
m_imgprocthread.reset(new thread(&GScanO1003399::proc, this, procmode)); m_imgprocthread.reset(new thread(&GScanO1003399::proc, this, procmode));
} }
@ -493,7 +494,7 @@ void GScanO1003399::usb_run()
switch (info.From) switch (info.From)
{ {
case IMG: case IMG:
if (is_runing()) if (is_runing() && (im_dev_count()>0))
im_rx(); im_rx();
break; break;
case MtBoard: case MtBoard:
@ -712,6 +713,7 @@ int GScanO1003399::im_dev_count()
static int num = 0; static int num = 0;
void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff) void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
{ {
preProcImgindex++;
auto& buffs= G400Decode(buff).getImageBuffs(); auto& buffs= G400Decode(buff).getImageBuffs();
vector<cv::Mat> mats; vector<cv::Mat> mats;
StopWatch sw; StopWatch sw;
@ -743,7 +745,27 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
buffs.clear(); buffs.clear();
if (m_param.is_autotext) 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) if (m_param.automaticcolor)
{ {
@ -751,13 +773,27 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
} }
if (m_param.is_split) 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; CImageApplySplit m_split;
std::vector<cv::Mat> tmp; std::vector<cv::Mat> tmp;
for (auto& var : mats) for (auto& var : mats)
{ {
if (!var.empty()) 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) for (auto& matvar : sptmp)
{ {
if (!matvar.empty()) 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); mats.swap(tmp);
} }
for (int i = 0; i < mats.size(); i++) { for (int i = 0; i < mats.size(); i++) {
@ -797,6 +835,7 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
} }
} }
} }
mats.clear(); mats.clear();
} }

View File

@ -27,6 +27,7 @@ public:
virtual BOOL IsConnected() override; virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override; virtual std::string GetFWVersion() override;
virtual std::string GetSerialNum() override; virtual std::string GetSerialNum() override;
virtual std::string GetMacAdder() override;
virtual std::uint32_t GetMotorFPGA() override; virtual std::uint32_t GetMotorFPGA() override;
virtual std::uint32_t GetScanFPGA() override; virtual std::uint32_t GetScanFPGA() override;
virtual bool is_scan() override; virtual bool is_scan() override;
@ -73,6 +74,7 @@ private:
private: private:
volatile int devState; volatile int devState;
volatile int Error_Code; volatile int Error_Code;
volatile bool is_back;
volatile bool scanflag; volatile bool scanflag;
volatile bool keeplastimg; volatile bool keeplastimg;
volatile bool autopaperstop; volatile bool autopaperstop;
@ -83,12 +85,13 @@ private:
volatile bool b_usbthread; volatile bool b_usbthread;
BlockingQueue<std::shared_ptr<std::vector<char>>> imgs; BlockingQueue<std::shared_ptr<std::vector<char>>> imgs;
BlockingQueue<std::string> m_paths; 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_imgprocthread;
std::shared_ptr<std::thread> m_usbthread; std::shared_ptr<std::thread> m_usbthread;
std::shared_ptr<std::vector<char>> im_data; std::shared_ptr<std::vector<char>> im_data;
BlockingQueue<std::shared_ptr<std::vector<unsigned char>>> m_imagedata; BlockingQueue<std::shared_ptr<std::vector<unsigned char>>> m_imagedata;
std::atomic_int imagecount; std::atomic_int imagecount;
int preProcImgindex;//预处理图像编号
void* huagods; void* huagods;
deviceevent_callback dev_callback; deviceevent_callback dev_callback;
}; };

View File

@ -245,11 +245,17 @@ int GScanO200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
} }
} }
BOOL GScanO200::IsConnected() BOOL GScanO200::IsConnected()
{ {
return m_usb.get() && m_usb->is_connected(); return m_usb.get() && m_usb->is_connected();
} }
std::string GScanO200::GetMacAdder()
{
return "This device does not support reading";
}
std::string GScanO200::GetFWVersion() std::string GScanO200::GetFWVersion()
{ {
if (m_usb.get() && m_usb->is_connected()) { if (m_usb.get() && m_usb->is_connected()) {
@ -476,9 +482,8 @@ bool GScanO200::Get_IsImageQueueEmpty()
void GScanO200::reset() void GScanO200::reset()
{ {
while (!m_pImages->empty()) if(!m_pImages->empty())
m_pImages->clear(); m_pImages->clear();
} }
UINT32 GScanO200::get_ErrorCode() UINT32 GScanO200::get_ErrorCode()

View File

@ -15,6 +15,7 @@ public:
virtual BOOL IsConnected() override; virtual BOOL IsConnected() override;
virtual std::string GetFWVersion() override; virtual std::string GetFWVersion() override;
virtual std::string GetSerialNum() override; virtual std::string GetSerialNum() override;
virtual std::string GetMacAdder() override;
virtual std::uint32_t GetMotorFPGA() override; virtual std::uint32_t GetMotorFPGA() override;
virtual std::uint32_t GetScanFPGA() override; virtual std::uint32_t GetScanFPGA() override;
virtual bool is_scan() override; virtual bool is_scan() override;

View File

@ -574,6 +574,10 @@ void GScanO400::usbhotplug(bool isleft)
} }
} }
std::string GScanO400::GetMacAdder()
{
return "The firmware version does not support reading";
}
void GScanO400::updateHVRatio() void GScanO400::updateHVRatio()
{ {
if (!(m_usb.get() && m_usb->is_connected())) if (!(m_usb.get() && m_usb->is_connected()))

View File

@ -17,6 +17,7 @@ public:
virtual std::string GetSerialNum() override; virtual std::string GetSerialNum() override;
virtual std::uint32_t GetMotorFPGA() override; virtual std::uint32_t GetMotorFPGA() override;
virtual std::uint32_t GetScanFPGA() override; virtual std::uint32_t GetScanFPGA() override;
virtual std::string GetMacAdder()override;
virtual bool is_scan() override; virtual bool is_scan() override;
virtual BOOL Get_Scanner_PaperOn() override; virtual BOOL Get_Scanner_PaperOn() override;
virtual int Get_Roller_num() override; virtual int Get_Roller_num() override;

View File

@ -251,6 +251,10 @@ BOOL GScanO400Android::IsConnected()
return m_usb.get() && m_usb->is_connected(); return m_usb.get() && m_usb->is_connected();
} }
std::string GScanO400Android::GetMacAdder() {
return "固件版本不支持读取";
}
std::string GScanO400Android::GetFWVersion() std::string GScanO400Android::GetFWVersion()
{ {
if (m_usb.get() && m_usb->is_connected()) { if (m_usb.get() && m_usb->is_connected()) {
@ -575,6 +579,7 @@ void GScanO400Android::usbhotplug(bool isleft)
if (isleft) { if (isleft) {
devState = DEV_WRONG; devState = DEV_WRONG;
Error_Code = USB_DISCONNECTED; Error_Code = USB_DISCONNECTED;
image_last = false;
m_pImages->setscanflags(false); m_pImages->setscanflags(false);
if (m_usb.get()) if (m_usb.get())
m_usb.reset(); m_usb.reset();
@ -606,6 +611,7 @@ void GScanO400Android::usbmain()
devState = DEV_ISRUNNING; devState = DEV_ISRUNNING;
image_last = true; image_last = true;
bool haveError = false; bool haveError = false;
bool is_first_error = true;
try try
{ {
StopWatch sw; StopWatch sw;
@ -628,6 +634,7 @@ void GScanO400Android::usbmain()
switch (usbcb.u32_Data) { switch (usbcb.u32_Data) {
case HAVE_IMAGE: case HAVE_IMAGE:
{ {
is_first_error = false;
int totalNum = usbcb.u32_Count&0x3fffffff; int totalNum = usbcb.u32_Count&0x3fffffff;
if ((usbcb.u32_Count & 0xc0000000) == 0) if ((usbcb.u32_Count & 0xc0000000) == 0)
{ {
@ -665,6 +672,8 @@ void GScanO400Android::usbmain()
//m_pImages->setscanflags(false); //m_pImages->setscanflags(false);
//std::this_thread::sleep_for(std::chrono::milliseconds(500)); //std::this_thread::sleep_for(std::chrono::milliseconds(500));
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP; devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
if (is_first_error)
image_last = false;
break; break;
} }
case COUNT_MODE: case COUNT_MODE:

View File

@ -17,6 +17,7 @@ public:
virtual std::string GetSerialNum() override; virtual std::string GetSerialNum() override;
virtual std::uint32_t GetMotorFPGA() override; virtual std::uint32_t GetMotorFPGA() override;
virtual std::uint32_t GetScanFPGA() override; virtual std::uint32_t GetScanFPGA() override;
virtual std::string GetMacAdder() override;
virtual bool is_scan() override; virtual bool is_scan() override;
virtual BOOL Get_Scanner_PaperOn() override; virtual BOOL Get_Scanner_PaperOn() override;
virtual int Get_Roller_num() override; virtual int Get_Roller_num() override;

View File

@ -190,6 +190,19 @@ enum Scanner_Reg_Defs
SR_GET_SCANN_NUM, SR_GET_SCANN_NUM,
SR_CLR_ROLLER_NUM, SR_CLR_ROLLER_NUM,
SR_GET_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_START = 0x100,
SR_UPDATA_STAUTUS = 0x101, SR_UPDATA_STAUTUS = 0x101,
SR_UPDATA_MD5_RELUST = 0x102, SR_UPDATA_MD5_RELUST = 0x102,
@ -292,7 +305,8 @@ typedef union HG_ScanConfig
unsigned int screw_detect_level : 3;//µÚÊ®ËÄλ unsigned int screw_detect_level : 3;//µÚÊ®ËÄλ
unsigned int iscorrect_mod : 1; unsigned int iscorrect_mod : 1;
unsigned int is_autopaper : 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 pc_correct : 1;
unsigned int enable_sizecheck : 1; unsigned int enable_sizecheck : 1;
unsigned int enabledsp_cache : 1; unsigned int enabledsp_cache : 1;

View File

@ -139,9 +139,11 @@ bool ImageMatQueue::valid()
void ImageMatQueue::clear() void ImageMatQueue::clear()
{ {
m_rawBuffs.Clear(); if(m_rawBuffs.Size()>0)
m_rawBuffs.Clear();
clear_cachefiles(); clear_cachefiles();
m_imagedata.Clear(); if (m_imagedata.Size() > 0)
m_imagedata.Clear();
atm_orgin_image_remains = 0; 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)));*/ 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 //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) { if (param.filter != 3 || param.enhance_color) {
int channel = 0; //filter none r g b enhance none r g b 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")); _tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata"));
#elif defined HANVON #elif defined HANVON
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata")); _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata"));
#elif defined MAKERIGHTWAY
_tcscat(szIniFile, _T("\\twain_32\\RIGHTWAYSCAN\\tessdata\\osd.traineddata"));
#else #else
_tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata")); _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata"));
#endif // #endif //
@ -492,6 +498,10 @@ void ImageMatQueue::proc()
sw.reset(); sw.reset();
if (!imgfront.empty() && !imgback.empty()) 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 ? imgback : imgfront);
mats.push_back(scanParam.is_switchfrontback ? imgfront : imgback); mats.push_back(scanParam.is_switchfrontback ? imgfront : imgback);
remove(info.path.c_str()); 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 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行数据 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 #ifdef UV
mats.push_back(scanParam.is_switchfrontback ? front : back); mats.push_back(scanParam.is_switchfrontback ? front : back);
mats.push_back(scanParam.is_switchfrontback ? back : front); mats.push_back(scanParam.is_switchfrontback ? back : front);
#else #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 ? front : back);
mats.push_back(scanParam.is_switchfrontback ? back : front); mats.push_back(scanParam.is_switchfrontback ? back : front);
#endif #endif
@ -556,6 +567,10 @@ void ImageMatQueue::proc()
{ {
Mat front = matuv(Rect(0, 0, mat.cols / 2, mat.rows)); Mat front = matuv(Rect(0, 0, mat.cols / 2, mat.rows));
Mat back = matuv(Rect(mat.cols / 2, 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 ? front : back);
uvmats.push_back(scanParam.is_switchfrontback ? back : front); uvmats.push_back(scanParam.is_switchfrontback ? back : front);
front.release(); front.release();
@ -605,7 +620,6 @@ void ImageMatQueue::proc()
#endif #endif
if (!scanParam.is_duplex && mats.size()>1) { if (!scanParam.is_duplex && mats.size()>1) {
mats.pop_back(); mats.pop_back();
break;
} }
if (scanParam.is_split) if (scanParam.is_split)
{ {
@ -668,17 +682,21 @@ void ImageMatQueue::proc()
} }
void ImageMatQueue::splitimg(std::vector<cv::Mat>& mats) { 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; CImageApplySplit m_split;
std::vector<cv::Mat> tmp; std::vector<cv::Mat> tmp;
for (auto& var : mats){ for (int i = 0; i < mats.size();i++) {
if (!var.empty()){ if (!mats[i].empty()){
auto sptmp = m_split.apply(var); auto sptmp = m_split.apply(mats[i],i);
for (auto& matvar : sptmp){ for (auto& matvar : sptmp){
if (!matvar.empty()) if (!matvar.empty())
tmp.push_back(matvar); tmp.push_back(matvar);
} }
} }
} }
if (tmp.size() >= 2)
std::swap(tmp[0], tmp[1]);
mats.swap(tmp); mats.swap(tmp);
} }

View File

@ -467,6 +467,8 @@ CString GetHidedlgPath()
_tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\hidedlg.exe")); _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\hidedlg.exe"));
#elif defined LANXUM #elif defined LANXUM
_tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\hidedlg.exe")); _tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\hidedlg.exe"));
#elif defined MAKERIGHTWAY
_tcscat(szIniFile, _T("\\twain_32\\RIGHTWAYSCAN\\hidedlg.exe"));
#else // MAKEHUAGAO #else // MAKEHUAGAO
_tcscat(szIniFile, _T("\\twain_32\\ZhibenScan\\hidedlg.exe")); _tcscat(szIniFile, _T("\\twain_32\\ZhibenScan\\hidedlg.exe"));
#endif #endif

View File

@ -65,6 +65,8 @@ const std::string OUTHOLE = "bOutHole";
const std::string OUTHOLERATIO = "iOutHoleRatio"; const std::string OUTHOLERATIO = "iOutHoleRatio";
const std::string DETACHNOISE = "detachnoise"; const std::string DETACHNOISE = "detachnoise";
const std::string DETACHNOISEVALUE = "detachnoisevalue"; const std::string DETACHNOISEVALUE = "detachnoisevalue";
const std::string FADEBACK = "bfadeback";
const std::string FADEBACKRANGE = "fadebackvalue";
const std::string HSVCORRECT = "bHsvCorrect"; const std::string HSVCORRECT = "bHsvCorrect";
//<!送纸选项卡 //<!送纸选项卡
@ -243,6 +245,8 @@ struct GScanCap
float contrast; /**< Contrast */ float contrast; /**< Contrast */
float brightness; /**< Brightness */ float brightness; /**< Brightness */
float threshold; /**< Threshold */ float threshold; /**< Threshold */
bool fadeback; /**< 除底色*/
int fadeback_range; /**< 除底色范围*/
uint8_t is_autocontrast; /**< 自动对比度*/ uint8_t is_autocontrast; /**< 自动对比度*/
uint8_t is_autocrop; /**< 自动裁切*/ uint8_t is_autocrop; /**< 自动裁切*/
bool normalCrop; /**<传统模式自动裁切*/ bool normalCrop; /**<传统模式自动裁切*/
@ -338,13 +342,15 @@ struct GScanCap_3399
int refuseInflow; /**< 防止渗透>*/ int refuseInflow; /**< 防止渗透>*/
int colorCorrection; /**< 色彩校正>*/ int colorCorrection; /**< 色彩校正>*/
int removeMorr; /**< 去除摩尔纹>*/ int removeMorr; /**< 去除摩尔纹>*/
int errorExtention; /** < 错误扩散>*/ int errorExtention; /**< 错误扩散>*/
int textureRemove; /** < 除网纹>*/ int textureRemove; /**< 除网纹>*/
int splitImage; /** < 图像拆分>*/ int splitImage; /**< 图像拆分>*/
CropRect cropRect; /**< 自定义裁切>*/ CropRect cropRect; /**< 自定义裁切>*/
MultiOutput multiOutput; /**< 多流输出>*/ MultiOutput multiOutput; /**< 多流输出>*/
bool normalCrop; /**< 自动裁切深色样张>*/ bool normalCrop; /**< 自动裁切深色样张>*/
uint32_t dogeardistabce; /**< 折角检测理论顶点到实际轮廓最新距离>*/ uint32_t dogeardistabce; /**< 折角检测理论顶点到实际轮廓最新距离>*/
bool fadeback; /**< 除底色>*/
int fadebackrange; /**< 除底色范围>*/
uint32_t reserve[1024]; /**< 预留4096字节做协议扩展*/ uint32_t reserve[1024]; /**< 预留4096字节做协议扩展*/
}; };

View File

@ -124,6 +124,8 @@ void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::strin
outJson["Config"].Add(OUTHOLERATIO, (int)(gcap.fillhole.fillholeratio)); outJson["Config"].Add(OUTHOLERATIO, (int)(gcap.fillhole.fillholeratio));
outJson["Config"].Add(DETACHNOISE, (bool)(gcap.detachnoise.is_detachnoise), false); outJson["Config"].Add(DETACHNOISE, (bool)(gcap.detachnoise.is_detachnoise), false);
outJson["Config"].Add(DETACHNOISEVALUE, (int)(gcap.detachnoise.detachnoise)); 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(HSVCORRECT, (bool)(gcap.hsvcorrect),false);
outJson["Config"].Add(ULTRADETECT, (bool)(gcap.hardwarecaps.en_doublefeed), 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(SWITCHFRONTBACK);
root["Config"].AddEmptySubArray(DETACHNOISE); root["Config"].AddEmptySubArray(DETACHNOISE);
root["Config"].AddEmptySubArray(DETACHNOISEVALUE); root["Config"].AddEmptySubArray(DETACHNOISEVALUE);
root["Config"].AddEmptySubArray(FADEBACK);
root["Config"].AddEmptySubArray(FADEBACKRANGE);
/*< brightness setting*/ /*< brightness setting*/
root["Config"].AddEmptySubArray(BRIGHTNESS); root["Config"].AddEmptySubArray(BRIGHTNESS);
root["Config"].AddEmptySubArray(AUTOCONTRAST); 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"][OUTHOLERATIO].Add((int)cfgArray[i].fillhole.fillholeratio);
root["Config"][DETACHNOISE].Add(i, (bool)cfgArray[i].detachnoise.is_detachnoise); root["Config"][DETACHNOISE].Add(i, (bool)cfgArray[i].detachnoise.is_detachnoise);
root["Config"][DETACHNOISEVALUE].Add((int)cfgArray[i].detachnoise.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"][HSVCORRECT].Add(i, (bool)cfgArray[i].hsvcorrect);
root["Config"][ULTRADETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_doublefeed); 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); root["Config"].Get(DETACHNOISE, itmDetachNoise);
neb::CJsonObject itmDetachNoiseValue; neb::CJsonObject itmDetachNoiseValue;
root["Config"].Get(DETACHNOISEVALUE, 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; neb::CJsonObject itmHsvCorrect;
root["Config"].Get(HSVCORRECT, itmHsvCorrect); root["Config"].Get(HSVCORRECT, itmHsvCorrect);
@ -523,8 +534,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
itmEnUV.Get(i, b_value); itmEnUV.Get(i, b_value);
cfp.hardwarecaps.en_uv = b_value ? 1 : 0; cfp.hardwarecaps.en_uv = b_value ? 1 : 0;
#endif #endif
itmBrtnes.Get(i, f_value); itmBrtnes.Get(i, i_value);
cfp.brightness = f_value; cfp.brightness = i_value;
itmAutoCrnt.Get(i, b_value); itmAutoCrnt.Get(i, b_value);
cfp.is_autocontrast = b_value ? 1 : 0; cfp.is_autocontrast = b_value ? 1 : 0;
itmContrast.Get(i, i_value); 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; cfp.detachnoise.is_detachnoise = b_value ? 1 : 0;
itmDetachNoiseValue.Get(i, i_value); itmDetachNoiseValue.Get(i, i_value);
cfp.detachnoise.detachnoise = 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); itmHsvCorrect.Get(i, b_value);
cfp.hsvcorrect = b_value ? 1 : 0; 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; cfp.detachnoise.is_detachnoise = bvalue ? 1 : 0;
root["Config"].Get(DETACHNOISEVALUE, index); root["Config"].Get(DETACHNOISEVALUE, index);
cfp.detachnoise.detachnoise = 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); root["Config"].Get(HSVCORRECT, bvalue);
cfp.hsvcorrect = bvalue ? 1 : 0; cfp.hsvcorrect = bvalue ? 1 : 0;
root["Config"].Get(NOISE, index); root["Config"].Get(NOISE, index);
@ -762,6 +781,8 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
#endif #endif
js[CONFIG][DETACHNOISE] = cap.detachnoise.is_detachnoise; js[CONFIG][DETACHNOISE] = cap.detachnoise.is_detachnoise;
js[CONFIG][DETACHNOISEVALUE] = cap.detachnoise.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][BRIGHTNESS] = cap.brightness;
js[CONFIG][AUTOCONTRAST] = cap.is_autocontrast; js[CONFIG][AUTOCONTRAST] = cap.is_autocontrast;
js[CONFIG][CONTRAST] = cap.contrast; js[CONFIG][CONTRAST] = cap.contrast;
@ -824,6 +845,9 @@ GScanCap GscanJsonConfig::JsonToGscancap(json& js)
cap.normalCrop = json_cast(js[CONFIG][CROPMODEL]).to_bool(); cap.normalCrop = json_cast(js[CONFIG][CROPMODEL]).to_bool();
cap.detachnoise.is_detachnoise = json_cast(js[CONFIG][DETACHNOISE]).to_int(); cap.detachnoise.is_detachnoise = json_cast(js[CONFIG][DETACHNOISE]).to_int();
cap.detachnoise.detachnoise = json_cast(js[CONFIG][DETACHNOISEVALUE]).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.brightness = json_cast(js[CONFIG][BRIGHTNESS]).to_float();
cap.is_autocontrast = json_cast(js[CONFIG][AUTOCONTRAST]).to_int(); cap.is_autocontrast = json_cast(js[CONFIG][AUTOCONTRAST]).to_int();
cap.contrast = json_cast(js[CONFIG][CONTRAST]).to_float(); cap.contrast = json_cast(js[CONFIG][CONTRAST]).to_float();
@ -881,6 +905,8 @@ json GscanJsonConfig::GetDefaultJson()
"bUVmodel": false, "bUVmodel": false,
"detachnoise": false , "detachnoise": false ,
"detachnoisevalue": 30 , "detachnoisevalue": 30 ,
"bfadeback": false ,
"fadebackvalue": 40,
"iBrightness": 0 , "iBrightness": 0 ,
"bAutoContrast": false , "bAutoContrast": false ,
"iContrast": 0 , "iContrast": 0 ,
@ -935,6 +961,8 @@ json GscanJsonConfig::GetDefaultJson()
"bSplit": false , "bSplit": false ,
"detachnoise": false , "detachnoise": false ,
"detachnoisevalue": 30 , "detachnoisevalue": 30 ,
"bfadeback": false ,
"fadebackvalue": 40,
"iBrightness": 0 , "iBrightness": 0 ,
"bAutoContrast": false , "bAutoContrast": false ,
"iContrast": 0 , "iContrast": 0 ,

View File

@ -19,4 +19,5 @@
#include "ImageApplyColorRecognition.h" #include "ImageApplyColorRecognition.h"
#include "ImageApplyUV.h" #include "ImageApplyUV.h"
#include "ImageApplySplit.h" #include "ImageApplySplit.h"
#include "ImageApplyFadeBackGroundColor.h"
#endif #endif

View File

@ -20,7 +20,7 @@
#include "ImageApply.h" #include "ImageApply.h"
class CImageApplyOutHole : public CImageApply class CImageApplyOutHole : public CImageApply
{ {
public: public:
@ -72,4 +72,3 @@ private:
}; };
#endif // !IMAGE_APPLY_OUT_HOLE_H #endif // !IMAGE_APPLY_OUT_HOLE_H

View File

@ -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()) if (pDib.empty())
return std::vector<cv::Mat>(); return std::vector<cv::Mat>();
std::vector<cv::Mat> retMats; std::vector<cv::Mat> retMats;
int heigth = pDib.rows; int heigth = pDib.rows;
int width = pDib.cols; int width = pDib.cols;
cv::Mat matF,matB,temp;
if (heigth > width) if (heigth > width)
{ {
cv::Mat matF = pDib(cv::Rect(0, 0, width, (int)(0.5 * heigth))); 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))); matB = pDib(cv::Rect(0, (int)(0.5 * heigth), width, (int)(0.5 * heigth)));
retMats.push_back(matF);
retMats.push_back(matB);
} }
else else
{ {
cv::Mat matF = pDib(cv::Rect(0, 0, (int)(width*0.5), heigth)); 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)); matB = pDib(cv::Rect((int)(width*0.5), 0, (int)(width * 0.5), heigth));
retMats.push_back(matF);
retMats.push_back(matB);
} }
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; return retMats;
} }

View File

@ -22,7 +22,7 @@ public:
~CImageApplySplit(void); ~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 #endif // !IMAGE_APPLY_SPLIT_H

View File

@ -62,6 +62,8 @@ enum class CapTypeEx : unsigned short {
TwEx_CropModel=0x8106, TwEx_CropModel=0x8106,
TwEx_DogEarDistance = 0x8107, TwEx_DogEarDistance = 0x8107,
TwEx_ImageSplit = 0x8108, TwEx_ImageSplit = 0x8108,
TwEx_IFadeBack = 0x8109,
TwEx_IFadeBackValue = 0x8110,
}; };
enum class PaperSizeEx : unsigned short { enum class PaperSizeEx : unsigned short {
@ -99,6 +101,8 @@ static constexpr const Identity srcIdent(
"AUGE", "AUGE",
#elif defined LANXUM #elif defined LANXUM
"LANXUM", "LANXUM",
#elif defined MAKERIGHTWAY
"RIGHTWAY",
#else // MAKEHUAGAO #else // MAKEHUAGAO
"ZHIBEN", "ZHIBEN",
#endif #endif
@ -172,7 +176,8 @@ static constexpr const Identity srcIdent(
#else #else
"HUAGOSCAN G300 TWAIN"// 兼容旧极课 pm changed "HUAGOSCAN G300 TWAIN" "HUAGOSCAN G300 TWAIN"// 兼容旧极课 pm changed "HUAGOSCAN G300 TWAIN"
#endif #endif
#elif defined UV && defined MAKERIGHTWAY
"RIGHTWAYSCAN G300 TWAIN"
#elif defined HANVON #elif defined HANVON
"HANVONSCAN HW-7000W TAWIN" "HANVONSCAN HW-7000W TAWIN"
@ -322,7 +327,7 @@ static std::vector<Vid_pid> DeviceID{
{0x3072,0x200}, {0x3072,0x200},
#endif // ISG100 #endif // ISG100
#elif defined G300 #elif defined G300
{0x3072,0x0300} {0x3072,0x0300},
#elif defined G400 #elif defined G400
{0x3072,0x400}, {0x3072,0x400},
#endif // ISG100 #endif // ISG100
@ -410,13 +415,25 @@ void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
if(!m_scanparam->en_fold) if(!m_scanparam->en_fold)
imgread /= 2; imgread /= 2;
} }
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince)) if (retcode == 200)
{ {
text += "\n扫描统计信息:\n进纸(张)" + to_string(scanner->get_scannum()) + if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
"\n扫描(张)" + to_string(imgread) + "\n扫描相差(张)" + to_string(scanner->get_scannum() - imgread) + {
"\n上传(页)" + to_string(scanner->get_imgTransfered()) + "\n上传相差(页)" + to_string(num - scanner->get_imgTransfered()); text += "请检查实际过纸张数!\n扫描统计信息:\n进纸(张)--\n扫描(张)" + to_string(imgread) + "\n扫描相差(张)--\n上传(页)"
scanner->set_lose_image_num(0); + 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()) +
"\n扫描(张)" + to_string(imgread) + "\n扫描相差(张)" + to_string(scanner->get_scannum() - imgread) +
"\n上传(页)" + to_string(scanner->get_imgTransfered()) + "\n上传相差(页)" + to_string(num - scanner->get_imgTransfered());
scanner->set_lose_image_num(0);
}
}
} }
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString((text + " " + caption).c_str()), NULL, SW_HIDE); 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)); FileTools::writelog(log_INFO, "open ds find device vid=" + to_string(vid) + "\tpid=" + to_string(pid));
if (vid == 0 || pid == 0) if (vid == 0 || pid == 0)
{ {
@ -1041,17 +1057,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
} }
else{ else{
m_scanparam->multi_output_red = 0;//非彩色模式下多流输出不可用 m_scanparam->multi_output_red = 0;//非彩色模式下多流输出不可用
//if (m_scanparam->pixtype == (int)PixelType::BlackWhite) m_scanparam->detachnoise.is_detachnoise = false;
// m_scanparam->sharpen = SharpenBlur::Sharpen_None; m_scanparam->fadeback = false;
//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_iBitdepth = mech == PixelType::Rgb ? 24 : (mech == PixelType::Gray ? 8 : 1); m_iBitdepth = mech == PixelType::Rgb ? 24 : (mech == PixelType::Gray ? 8 : 1);
return success(); 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); 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_query[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = msgSupportGetAllSetReset;
m_caps[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = [this](Msg msg, Capability& data)->Result { 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); guiIndicator->ShowWindow(SW_HIDE);
if (ret != -1) { if (ret != -1) {
int index = scanner->geterrorindex(); int index = scanner->geterrorindex();
if (ret == 82) if (ret == 82 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", ret); showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", ret);
else if(ret==75) else if(ret==75 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", ret); showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", ret);
else else
showmsg("提示", msgs[(UsbSupported)ret], ret); showmsg("提示", msgs[(UsbSupported)ret], ret);
@ -2139,7 +2173,7 @@ Result HuagaoDs::pendingXfersReset(const Identity&, PendingXfers& data) {
if (scanner.get()) if (scanner.get())
{ {
scanner->Stop_scan(); scanner->Stop_scan();
scanner->reset(); //scanner->reset();
scanner->ResetScanner(); scanner->ResetScanner();
} }
//guiIndicator.reset(); //guiIndicator.reset();
@ -2364,7 +2398,6 @@ Result HuagaoDs::imageNativeXferGet(const Identity& id, ImageNativeXfer& data) {
data = ImageNativeXfer(bmpSize()); data = ImageNativeXfer(bmpSize());
std::copy(bmpBegin(), bmpEnd(), data.data<char>().data()); std::copy(bmpBegin(), bmpEnd(), data.data<char>().data());
bmpData.reset(new std::vector<unsigned char>); bmpData.reset(new std::vector<unsigned char>);
//FileTools::write_log("正在上传图片 ===> Twain transfered num of " + to_string(++xtfer) + " images"); //FileTools::write_log("正在上传图片 ===> Twain transfered num of " + to_string(++xtfer) + " images");
FileTools::writelog(log_INFO, "正在上传图片 ===> 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 }; return { ReturnCode::XferDone, ConditionCode::Success };
@ -2551,8 +2584,9 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
TwGlue glueUiOnly = { confirmFunction, cancelFunction }; TwGlue glueUiOnly = { confirmFunction, cancelFunction };
std::string serialnum = scanner->GetSerialNum(); std::string serialnum = scanner->GetSerialNum();
std::string hardwareversion = scanner->GetFWVersion(); std::string hardwareversion = scanner->GetFWVersion();
std::string macadder = scanner->GetMacAdder();
uint32_t mbversion = scanner->GetMotorFPGA(); 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); guiTwain->Create(IDD_TWAINUI, parent);
CRect newRect; CRect newRect;
::GetWindowRect(static_cast<HWND>(ui.parent().raw()), &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()); 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); 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) { if (m_bIndicator) {
//!< cancel button push //!< cancel button push
@ -2723,9 +2795,9 @@ Twpp::Result HuagaoDs::startScan()
m_haveError = true; m_haveError = true;
//ShellExecute(guiTwain ? guiTwain->m_hWnd : NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE); //ShellExecute(guiTwain ? guiTwain->m_hWnd : NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE);
int index = scanner->geterrorindex(); int index = scanner->geterrorindex();
if (retCode == 82) if (retCode == 82 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", retCode); showmsg("提示", "在第" + to_string(index) + "页检测到折角,停止扫描!", retCode);
else if (retCode == 75) else if (retCode == 75 && ((typeid(*scanner.get()) == typeid(GScanO1003399))))
showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", retCode); showmsg("提示", "在第" + to_string(index) + "页检测到尺寸不符,停止扫描!", retCode);
else else
showmsg("提示", msgs[(UsbSupported)retCode], retCode); showmsg("提示", msgs[(UsbSupported)retCode], retCode);

Binary file not shown.

Binary file not shown.

Binary file not shown.