mirror of http://192.168.1.51:8099/lmh188/twain3.0
parent
7d0e35e591
commit
d3c784a8b2
|
@ -42,7 +42,7 @@ BOOL CAdvancedDLG::OnInitDialog()
|
|||
|
||||
CTabPageSSL::OnInitDialog();
|
||||
m_Edit_noise.SetSlideLink(this, IDC_SLIDER_NOISE);
|
||||
m_Edit_noise.SetParams(5, 50, 2);
|
||||
m_Edit_noise.SetParams(1, 10, 1);
|
||||
m_Edit_noise.SetValue(noise);
|
||||
|
||||
m_Edit_indent.SetSlideLink(this, IDC_SLIDER_INDENT);
|
||||
|
|
|
@ -92,6 +92,7 @@ BEGIN_MESSAGE_MAP(CFeedPaperPage, CTabPageSSL)
|
|||
ON_BN_CLICKED(IDC_RDCONSISTSCAN, &CFeedPaperPage::OnBnClickedScanMode)
|
||||
ON_BN_CLICKED(IDC_RDSPECIFYSCANNUM, &CFeedPaperPage::OnBnClickedScanMode)
|
||||
ON_BN_CLICKED(IDC_CKSKEWDETECT, &CFeedPaperPage::OnBnClickedCkskewdetect)
|
||||
ON_CBN_SELCHANGE(IDC_CMBORENTATION, &CFeedPaperPage::OnCbnSelchangeCmborentation)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
BOOL CFeedPaperPage::PreTranslateMessage(MSG* pMsg)
|
||||
|
@ -131,6 +132,16 @@ void CFeedPaperPage::FeedPaperPageUpdate(int val)
|
|||
// m_tempBtn->SetCheck(0);
|
||||
//BOOL enable = (val == 0 || val == 4);
|
||||
//m_tempBtn->EnableWindow(!enable);
|
||||
comboxduplux = val;
|
||||
if ((val > 0) && (val < 4) && (m_cmBoxOrentation.GetCurSel() != 4))
|
||||
{
|
||||
((CButton*)(GetDlgItem(IDC_CKBACKROTATION)))->EnableWindow(TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
((CButton*)(GetDlgItem(IDC_CKBACKROTATION)))->EnableWindow(FALSE);
|
||||
((CButton*)(GetDlgItem(IDC_CKBACKROTATION)))->SetCheck(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void CFeedPaperPage::FeedAutoDescrewUpdate(int val)
|
||||
|
@ -160,3 +171,10 @@ void CFeedPaperPage::OnBnClickedCkskewdetect()
|
|||
m_sldSkrewDetecttion.SetPos(3);
|
||||
m_sldSkrewDetecttion.EnableWindow(m_cbSkew);
|
||||
}
|
||||
|
||||
|
||||
void CFeedPaperPage::OnCbnSelchangeCmborentation()
|
||||
{
|
||||
// TODO: 在此添加控件通知处理程序代码
|
||||
FeedPaperPageUpdate(comboxduplux);
|
||||
}
|
||||
|
|
|
@ -42,6 +42,9 @@ protected:
|
|||
|
||||
private:
|
||||
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||
int comboxduplux;
|
||||
/*std::function<void()> m_datachange;*/
|
||||
|
||||
public:
|
||||
afx_msg void OnCbnSelchangeCmborentation();
|
||||
};
|
||||
|
|
|
@ -50,8 +50,10 @@ CImageProcPage::~CImageProcPage()
|
|||
{
|
||||
}
|
||||
|
||||
void CImageProcPage::ImageProcPageUpdate(int val,bool is_Crop)
|
||||
void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool is_Crop)
|
||||
{
|
||||
this->twss = twss;
|
||||
this->cmduplexsel = cmduplexsel;
|
||||
CComboBox* m_temp = (CComboBox*)(GetDlgItem(IDC_CMBFILTER));
|
||||
CButton* t_chMultiOutput = (CButton*)(GetDlgItem(IDC_CKMULTIOUTPUT));
|
||||
CComboBox* m_temp_sharpen = (CComboBox*)(GetDlgItem(IDC_CMBSHARPEN));
|
||||
|
@ -63,6 +65,12 @@ void CImageProcPage::ImageProcPageUpdate(int val,bool is_Crop)
|
|||
{
|
||||
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
|
||||
}
|
||||
if (val == 0)
|
||||
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE);
|
||||
else {
|
||||
GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE);
|
||||
((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE);
|
||||
}
|
||||
if (0 == val||val==3)//彩色
|
||||
{
|
||||
m_temp->SetCurSel(0);
|
||||
|
@ -88,11 +96,18 @@ void CImageProcPage::ImageProcPageUpdate(int val,bool is_Crop)
|
|||
m_edit_detachnoise.EnableWindow(false);
|
||||
m_slider_detachnoise.EnableWindow(false);
|
||||
}
|
||||
//bool enabele = ival <= 1;//彩色或灰度
|
||||
//if (!enabele) {
|
||||
// m_temp_sharpen->SetCurSel(0);
|
||||
//}
|
||||
//m_temp_sharpen->EnableWindow(enabele);
|
||||
#ifndef G300
|
||||
if (twss == 19 || twss == 20 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#else
|
||||
if (twss == 8 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#endif // !G300
|
||||
{
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
|
||||
}
|
||||
else
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
|
||||
|
||||
}
|
||||
|
||||
void CImageProcPage::ImageAutoDescrewUpdate(int val)
|
||||
|
@ -130,7 +145,7 @@ BOOL CImageProcPage::OnInitDialog()
|
|||
m_edit_hole.SetValue(0.10);
|
||||
|
||||
m_edit_detachnoise.SetSlideLink(this, IDC_SLIDERDETACHNOISE);
|
||||
m_edit_detachnoise.SetParams(0, 50, 10);
|
||||
m_edit_detachnoise.SetParams(10, 50, 10);
|
||||
m_edit_detachnoise.SetValue(detachnoise);
|
||||
|
||||
((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(is_detachnoise);
|
||||
|
@ -222,6 +237,17 @@ void CImageProcPage::OnBnClickedCkfillblackrect()
|
|||
{
|
||||
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
|
||||
}
|
||||
#ifndef G300
|
||||
if (twss == 19 || twss == 20 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#else
|
||||
if (twss == 8|| (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#endif // !G300
|
||||
{
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
|
||||
}
|
||||
else
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -234,6 +260,17 @@ void CImageProcPage::OnBnClickedCkautodeskrew()
|
|||
{
|
||||
((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false);
|
||||
}
|
||||
#ifndef G300
|
||||
if (twss == 19 || twss == 20 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#else
|
||||
if (twss == 8 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck())
|
||||
#endif // !G300
|
||||
{
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false);
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false);
|
||||
}
|
||||
else
|
||||
((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
BOOL m_ckbRemoveHole;
|
||||
BOOL m_ckbHSVCorrect;
|
||||
BOOL m_ckbDetachNoise;
|
||||
void ImageProcPageUpdate(int val, bool is_Crop);
|
||||
void ImageProcPageUpdate(int val,int twss,int cmduplexsel, bool is_Crop);
|
||||
void ImageAutoDescrewUpdate(int val);
|
||||
void EnableOutHoleCheckChanged(BOOL enable);
|
||||
void SetOutHoleValue(int value);
|
||||
|
@ -36,6 +36,8 @@ public:
|
|||
int indent;
|
||||
int noise;
|
||||
int threshold;
|
||||
int twss;
|
||||
int cmduplexsel;
|
||||
bool is_convex;
|
||||
bool is_crop;
|
||||
bool is_bw;
|
||||
|
|
|
@ -60,7 +60,7 @@ BOOL CTwainUI::OnInitDialog()
|
|||
this->SetWindowText(TWAIN_NAME);
|
||||
|
||||
auto dataChangeFunction = [this]() {
|
||||
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel(),
|
||||
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel(),m_pageBasic->m_cmBoxSS->GetCurSel(),m_pageBasic->m_cmBoxDuplex->GetCurSel(),
|
||||
(getcombox_ss(m_pageBasic->m_cmBoxSS->GetCurSel())== TwSS::USStatement)||(getcombox_ss(m_pageBasic->m_cmBoxSS->GetCurSel()) == TwSS::None));
|
||||
m_pageFeedPaper->FeedPaperPageUpdate(m_pageBasic->m_cmBoxDuplex->GetCurSel());
|
||||
m_pageImageProc->ImageAutoDescrewUpdate(m_pageBasic->m_cmBoxSS->GetCurSel());
|
||||
|
@ -186,9 +186,16 @@ void CTwainUI::UpdateUI()
|
|||
m_pageImageProc->is_convex = settings->is_convex;
|
||||
m_pageBasic->discardblank_percent = settings->discardblank_percent;
|
||||
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKCROPMODEL))->SetCheck(settings->normalCrop);
|
||||
m_pageImageProc->m_ckbFillBlack = settings->fillbackground==TRUE ? TRUE : FALSE;//填充黑框
|
||||
m_pageImageProc->m_ckbAutoDeskrew = settings->autodescrew ? TRUE : FALSE;//自动纠偏
|
||||
UpdateFilterCmbx();
|
||||
if (settings->fillbackground || settings->autodescrew || settings->is_autocrop) {
|
||||
m_pageImageProc->GetDlgItem(IDC_ADVANCEDSET)->EnableWindow(TRUE);
|
||||
}
|
||||
else {
|
||||
m_pageImageProc->GetDlgItem(IDC_ADVANCEDSET)->EnableWindow(FALSE);
|
||||
}
|
||||
m_pageImageProc->m_cmBoxSharpen.SetCurSel(settings->sharpen);
|
||||
//UpdateSharpenCmbx();
|
||||
m_pageImageProc->m_ckbRemoveHole = settings->fillhole.is_fillhole==TRUE?TRUE:FALSE;//除穿孔可用性
|
||||
|
@ -206,11 +213,15 @@ void CTwainUI::UpdateUI()
|
|||
m_pageImageProc->m_ckbMultioutput = FALSE;//多流除红
|
||||
m_pageImageProc->m_ckbHSVCorrect = settings->hsvcorrect == TRUE ? TRUE : FALSE;//答题卡除红
|
||||
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(settings->pixtype == 2);//彩色可用
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(settings->pixtype == 2);
|
||||
m_pageImageProc->UpdateData(FALSE);
|
||||
m_pageFeedPaper->dogear.SetCheck(settings->is_dogeardetection);
|
||||
//!< Page feed paper
|
||||
if(settings->is_duplex==TRUE)
|
||||
m_pageFeedPaper->m_cbRotation = settings->is_backrotate180==TRUE ? TRUE : FALSE;//背面旋转180
|
||||
if (settings->is_duplex || settings->is_autodiscradblank_normal ||settings->is_autodiscradblank_vince)
|
||||
{
|
||||
m_pageFeedPaper->m_cbRotation = settings->is_backrotate180 == TRUE ? TRUE : FALSE;//背面旋转180
|
||||
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(settings->is_autotext ? FALSE : TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(FALSE);
|
||||
|
@ -241,6 +252,8 @@ void CTwainUI::UpdateUI()
|
|||
|
||||
m_pageFeedPaper->UpdateData(FALSE);
|
||||
m_pageBasic->updateCmbDuplex(TRUE);
|
||||
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel(), m_pageBasic->m_cmBoxSS->GetCurSel(), m_pageBasic->m_cmBoxDuplex->GetCurSel(),
|
||||
(getcombox_ss(m_pageBasic->m_cmBoxSS->GetCurSel()) == TwSS::USStatement) || (getcombox_ss(m_pageBasic->m_cmBoxSS->GetCurSel()) == TwSS::None));
|
||||
}
|
||||
|
||||
void CTwainUI::UpdateFilterCmbx()
|
||||
|
@ -469,6 +482,7 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
|||
settings->contrast = configItem->Contrast;
|
||||
settings->brightness = (configItem->Brightness);
|
||||
settings->gamma = (configItem->Gamma);
|
||||
settings->normalCrop = ((CButton*)m_pageImageProc->GetDlgItem(IDC_CKCROPMODEL))->GetCheck();
|
||||
settings->is_autocrop = paper.Paper == TwSS::None;
|
||||
settings->is_duplex = configItem->Duplex >= 1;
|
||||
settings->is_autodiscradblank_normal = configItem->Duplex == 2;
|
||||
|
@ -541,13 +555,13 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
|||
settings->resolution_native = 200.0f;
|
||||
#endif
|
||||
if (settings->pixtype == TWPT_BW)
|
||||
{
|
||||
if (settings->filter == 3 && settings->enhance_color <=1)
|
||||
{
|
||||
settings->enhance_color = Enchace_Color::Enhance_Red;
|
||||
settings->filter = 3;//none
|
||||
}
|
||||
}
|
||||
//{
|
||||
// if (settings->filter == 3 && settings->enhance_color <=1)
|
||||
// {
|
||||
// settings->enhance_color = Enchace_Color::Enhance_Red;
|
||||
// settings->filter = 3;//none
|
||||
// }
|
||||
//}
|
||||
UpdateUi();
|
||||
}
|
||||
|
||||
|
@ -587,18 +601,25 @@ void CTwainUI::UpdateUi()
|
|||
m_pageImageProc->m_cmBoxFilter.EnableWindow((m_pageBasic->m_cmBoxColorMode->GetCurSel() != 0) && (m_pageBasic->m_cmBoxColorMode->GetCurSel() != 3));
|
||||
INT dupindex = m_pageBasic->m_cmBoxDuplex->GetCurSel();
|
||||
BOOL enableback = dupindex == 0 || dupindex == 4;
|
||||
if (enableback)
|
||||
if ((dupindex==0)||(dupindex==4))
|
||||
{
|
||||
((CButton*)(m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)))->SetCheck(!enableback);
|
||||
((CButton*)(m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)))->SetCheck(FALSE);
|
||||
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(FALSE);
|
||||
}
|
||||
else
|
||||
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(m_pageFeedPaper->m_cmBoxOrentation.GetCurSel()==4? FALSE:TRUE);
|
||||
if (dupindex == 4) {
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->SetCheck(dupindex == 4 ? TRUE : FALSE);
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->SetCheck(TRUE);
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->EnableWindow(FALSE);
|
||||
}
|
||||
}
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->EnableWindow(!(dupindex == 4));
|
||||
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(!enableback);
|
||||
else
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->EnableWindow(TRUE);
|
||||
|
||||
m_pageImageProc->GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(((CButton*)m_pageImageProc->GetDlgItem(IDC_CKREMOVEHOLE))->GetCheck() == TRUE);
|
||||
m_pageFeedPaper->GetDlgItem(IDC_SLDDETECTLEVEL)->EnableWindow(((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKSKEWDETECT))->GetCheck() == TRUE);
|
||||
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(m_pageBasic->m_cmBoxColorMode->GetCurSel() == 0);
|
||||
if(m_pageBasic->m_cmBoxColorMode->GetCurSel() != 0)
|
||||
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(FALSE);
|
||||
}
|
||||
|
||||
void CTwainUI::setvisable_size(bool flag)
|
||||
|
|
|
@ -139,7 +139,16 @@ public:
|
|||
virtual ~IScanner()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置本批次扫描的样张数量
|
||||
/// </summary>
|
||||
/// <param name="val">样张数量</param>
|
||||
void set_scannum(int val) { scannum = val; };
|
||||
/// <summary>
|
||||
/// 获取本批次扫描的样张数量
|
||||
/// </summary>
|
||||
/// <returns>样张数量</returns>
|
||||
int get_scannum() { return scannum; };
|
||||
/// <summary>
|
||||
/// 获取PC获取的图像数量(页计数)
|
||||
/// </summary>
|
||||
|
@ -238,6 +247,7 @@ protected:
|
|||
int imgreadednum;
|
||||
int imgtransfered;
|
||||
int roller_num;
|
||||
int scannum;
|
||||
int lose_image_num;
|
||||
bool is_AndroidOrLinux;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include "ImageProcess/ImageApplyHeaders.h"
|
||||
#include "ImageMultiOutput.h"
|
||||
#include "scn_config.h"
|
||||
#include "UsbScanEx.h"
|
||||
#include "PaperSize.h"
|
||||
#include "GScan.h"
|
||||
|
||||
|
@ -45,8 +46,6 @@ GScanO1003399::~GScanO1003399()
|
|||
m_usbthread->join();
|
||||
m_usbthread.reset();
|
||||
}
|
||||
if (fu_rx.valid())
|
||||
fu_rx.wait();
|
||||
}
|
||||
|
||||
void GScanO1003399::open(int vid, int pid)
|
||||
|
@ -59,7 +58,8 @@ void GScanO1003399::open(int vid, int pid)
|
|||
//}
|
||||
if (m_usb.get()&&m_usb->is_connected())
|
||||
return;
|
||||
auto lsusb = CyUsbList::find_all();
|
||||
//auto lsusb = CyUsbList::find_all();
|
||||
auto lsusb = UsbScan_List::find_vid_pid(0x3072, 0x0139);
|
||||
if (!lsusb.empty())
|
||||
{
|
||||
m_usb = *lsusb.begin();
|
||||
|
@ -81,12 +81,14 @@ int GScanO1003399::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
StopWatch sw;
|
||||
while (true)
|
||||
{
|
||||
if ((m_imagedata.Size() < 1)&&(!is_runing()))
|
||||
if ((image==0)&&(!is_runing())&&(!scanflag))
|
||||
{
|
||||
DoEvents();
|
||||
this_thread::sleep_for(chrono::milliseconds(1));
|
||||
if (!is_runing())
|
||||
{
|
||||
int roller_num_new= count();
|
||||
set_scannum(abs(roller_num_new - roller_num));
|
||||
if (devState == DEV_WRONG)
|
||||
return get_ErrorCode();
|
||||
return -1;
|
||||
|
@ -94,10 +96,10 @@ int GScanO1003399::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
if (sw.elapsed_s() > 30.0)
|
||||
{
|
||||
devState = DEV_STOP;
|
||||
if (fu_rx.valid())
|
||||
fu_rx.wait();
|
||||
Stop_scan();
|
||||
ResetScanner();
|
||||
int roller_num_new = count();
|
||||
set_scannum(abs(roller_num_new - roller_num));
|
||||
return AQUIRE_IMAGE_TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
@ -108,6 +110,7 @@ int GScanO1003399::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
FileTools::writelog(log_INFO, "aquire_bmpdata num =" + to_string(aquirenum++));
|
||||
bmpdata = *(m_imagedata.Take());
|
||||
UpdateScanInfo(get_imgnReaded(), countNTransfered());
|
||||
image--;
|
||||
return 0;
|
||||
}
|
||||
DoEvents();
|
||||
|
@ -165,12 +168,13 @@ bool GScanO1003399::is_scan()
|
|||
|
||||
BOOL GScanO1003399::Get_Scanner_PaperOn()
|
||||
{
|
||||
return scanner_read_reg(m_usb, SR_PAPER_READY);
|
||||
//return scanner_read_reg(m_usb, SR_PAPER_READY);
|
||||
return true;
|
||||
}
|
||||
|
||||
int GScanO1003399::Get_Roller_num()
|
||||
{
|
||||
return 0;
|
||||
return count();
|
||||
}
|
||||
|
||||
void GScanO1003399::config_params(GScanCap& param)
|
||||
|
@ -269,12 +273,13 @@ void GScanO1003399::config_params(GScanCap& param)
|
|||
|
||||
void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||
{
|
||||
|
||||
roller_num = this->count();
|
||||
scanflag = true;
|
||||
Set_ErrorCode(0);
|
||||
getimgnum = 0;
|
||||
aquirenum = 0;
|
||||
|
||||
image = 0;
|
||||
keeplastimg = true;
|
||||
reset();
|
||||
devState = DEV_ISRUNNING;
|
||||
if (scan_mode())
|
||||
|
@ -299,13 +304,11 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
|||
|
||||
void GScanO1003399::Stop_scan()
|
||||
{
|
||||
if (devState != DEV_ISRUNNING)
|
||||
return;
|
||||
stop();
|
||||
scanflag = false;
|
||||
if (fu_rx.valid())
|
||||
fu_rx.wait();
|
||||
devState == DEV_ISRUNNING ? devState = DEV_STOP : devState = DEV_WRONG;
|
||||
if ((devState == DEV_WRONG) || (devState == DEV_STOP))
|
||||
return;
|
||||
devState = DEV_STOP;
|
||||
}
|
||||
|
||||
int GScanO1003399::notifyscan()
|
||||
|
@ -376,13 +379,16 @@ void GScanO1003399::usb_run()
|
|||
auto length = m_usb->read_int(buff, sizeof(buff));
|
||||
if (((length) == sizeof(buff)) || im_dev_count())
|
||||
{
|
||||
if (im_dev_count()) //将取图消息提前防止未接收到img信息后不取图导致程序无法退出 2021.7.16
|
||||
if (is_runing())
|
||||
im_rx();
|
||||
HGEIntInfo info = *(HGEIntInfo*)&buff;
|
||||
switch (info.From)
|
||||
{
|
||||
case IMG:
|
||||
if (is_runing())
|
||||
im_rx();
|
||||
break;
|
||||
//case IMG:
|
||||
// if (is_runing())
|
||||
// im_rx();
|
||||
// break;
|
||||
case MtBoard:
|
||||
FileTools::writelog(log_ERROR, "Got MotorBoard error code = " + to_string(info.Code));
|
||||
break;
|
||||
|
@ -392,19 +398,37 @@ void GScanO1003399::usb_run()
|
|||
case V4L2:
|
||||
FileTools::writelog(log_ERROR, "Got V4L2 Error code = " + to_string(info.Code));
|
||||
break;
|
||||
case STOPSCAN:
|
||||
FileTools::writelog(log_INFO, "StopScan");
|
||||
break;
|
||||
default:
|
||||
FileTools::writelog(log_ERROR, "Got Unkown error code ! From =" + to_string(info.From) + " Code = " + to_string(info.Code));
|
||||
break;
|
||||
}
|
||||
if ((codeconvter(info) != 0))
|
||||
{
|
||||
if (info.Code==0x10||info.Code==0x20||info.Code==0x40)
|
||||
{
|
||||
while (scanner_read_reg(m_usb, SR_STATUS) & 0x1)
|
||||
this_thread::sleep_for(chrono::microseconds(10));
|
||||
if (m_param.is_duplex)
|
||||
pop_dev_im();
|
||||
pop_dev_im();
|
||||
}
|
||||
else
|
||||
{
|
||||
keeplastimg = false;
|
||||
im_rx();
|
||||
}
|
||||
scanflag = false;
|
||||
devState = codeconvter(info) == -1 ? DEV_STOP : DEV_WRONG;
|
||||
if ((devState != DEV_WRONG) && (codeconvter(info) < 0))
|
||||
devState = DEV_STOP;
|
||||
else if ((devState != DEV_WRONG) && (codeconvter(info) > 0))
|
||||
devState = DEV_WRONG;
|
||||
}
|
||||
if (codeconvter(info) > 0)
|
||||
{
|
||||
Set_ErrorCode(codeconvter(info));
|
||||
stop();
|
||||
}
|
||||
this_thread::sleep_for(chrono::microseconds(10));
|
||||
}
|
||||
|
@ -424,7 +448,8 @@ void GScanO1003399::stop()
|
|||
|
||||
bool GScanO1003399::is_runing()
|
||||
{
|
||||
return scanner_read_reg(m_usb, SR_STATUS) & 0x01;
|
||||
int val = scanner_read_reg(m_usb, SR_STATUS) & 0x3;
|
||||
return (val > 0) && (val < 4);
|
||||
}
|
||||
|
||||
int GScanO1003399::scan_mode()
|
||||
|
@ -473,9 +498,18 @@ void GScanO1003399::im_rx()
|
|||
if (!is_rx() && !is_dev_tx())
|
||||
{
|
||||
fu_rx = m_imgthread.enqueue([this] {
|
||||
do
|
||||
{
|
||||
while (im_dev_count()){
|
||||
/* code */
|
||||
if (keeplastimg)
|
||||
{
|
||||
this_thread::sleep_for(chrono::microseconds(10));
|
||||
if (m_param.is_duplex) {
|
||||
if(im_dev_count()<3)
|
||||
continue;
|
||||
}
|
||||
if(im_dev_count()<2)
|
||||
continue;
|
||||
}
|
||||
auto &buffi = im_data;
|
||||
int count = front_datasize();
|
||||
buffi->resize(count);
|
||||
|
@ -485,9 +519,13 @@ void GScanO1003399::im_rx()
|
|||
pop_dev_im();
|
||||
vector<cv::Mat> mats;
|
||||
auto& buffs = G400Decode(buffi).getImageBuffs();
|
||||
if (m_param.multi_output_red)
|
||||
image += 2;
|
||||
else
|
||||
image++;
|
||||
UpdateScanInfo(countNReaded(), get_imgTransfered());
|
||||
imgproce(buffs);
|
||||
} while (im_dev_count());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -526,25 +564,24 @@ int GScanO1003399::im_dev_count()
|
|||
void GScanO1003399::imgproce(std::vector<std::shared_ptr<std::vector<char>>>& buffs)
|
||||
{
|
||||
vector<cv::Mat> mats;
|
||||
bool isbwimg = false;
|
||||
for (auto& buf : buffs) {
|
||||
cv::ImreadModes rmc;
|
||||
//int rm;
|
||||
if (m_param.filter != 3 || m_param.enhance_color || m_param.hsvcorrect) {
|
||||
rmc = cv::IMREAD_COLOR;
|
||||
//rm = 1;
|
||||
}
|
||||
else {
|
||||
rmc = m_param.pixtype == 2 ? cv::IMREAD_COLOR : cv::IMREAD_GRAYSCALE;
|
||||
//rm = scanParam.pixtype == 2 ? 1 : 6;
|
||||
}
|
||||
cv::ImreadModes rmc = m_param.pixtype == 2 ? cv::IMREAD_COLOR : cv::IMREAD_GRAYSCALE;
|
||||
try
|
||||
{
|
||||
if (buf->at(0) == -119 && buf->at(1) == 0x50 && buf->at(2) == 0x4e && buf->at(3) == 0x47)
|
||||
{
|
||||
isbwimg = true;
|
||||
rmc = cv::IMREAD_GRAYSCALE;
|
||||
}
|
||||
cv::Mat mat = cv::imdecode(*buf, rmc);
|
||||
if (mat.empty()) {
|
||||
FileTools::writelog(log_ERROR, "decode image data error");
|
||||
continue;
|
||||
}
|
||||
buf.reset();
|
||||
//if (isbwimg)
|
||||
// cv::flip(mat, mat, 0);
|
||||
mats.push_back(mat);
|
||||
FileTools::writelog(log_INFO, "push_back image num= " + to_string(getimgnum++));
|
||||
}
|
||||
|
@ -558,7 +595,6 @@ void GScanO1003399::imgproce(std::vector<std::shared_ptr<std::vector<char>>>& bu
|
|||
if (m_param.automaticcolor)
|
||||
{
|
||||
CImageApplyColorRecognition(m_param.automaticcolortype == 1 ? CImageApplyColorRecognition::ColorRecognitionMode::Color_Gray : CImageApplyColorRecognition::ColorRecognitionMode::Color_Mono).apply(mats,m_param.is_duplex);
|
||||
|
||||
}
|
||||
for (int i = 0; i < mats.size(); i++) {
|
||||
//if (!m_param.is_duplex && i == 1) {
|
||||
|
@ -570,7 +606,7 @@ void GScanO1003399::imgproce(std::vector<std::shared_ptr<std::vector<char>>>& bu
|
|||
if (m_param.pixtype == 1 && m_param.hsvcorrect)
|
||||
if (mats[i].channels() == 3)
|
||||
cvtColor(mats[i], mats[i], cv::COLOR_BGR2GRAY);
|
||||
idata = (m_param.pixtype == 0 || (((m_param.automaticcolortype == 0) && (m_param.automaticcolor == true)) && (mats[i].channels() == 1))) ? (IMat2Bmp)Mat2BmpBw(mats[i], m_param.resolution_dst) : Mat2Bmp(mats[i], m_param.resolution_dst);
|
||||
idata = (isbwimg|| m_param.pixtype == 0 || (((m_param.automaticcolortype == 0) && (m_param.automaticcolor == true)) && (mats[i].channels() == 1))) ? (IMat2Bmp)Mat2BmpBw(mats[i], m_param.resolution_dst) : Mat2Bmp(mats[i], m_param.resolution_dst);
|
||||
//if (!m_param.multi_output_red)
|
||||
// mats[i].release();
|
||||
|
||||
|
@ -647,6 +683,7 @@ int GScanO1003399::codeconvter(HGEIntInfo code)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (code.From == HGType::STOPSCAN)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ private:
|
|||
volatile int devState;
|
||||
volatile int Error_Code;
|
||||
volatile bool scanflag;
|
||||
volatile bool keeplastimg;
|
||||
GScanCap m_param;
|
||||
std::shared_ptr<IUsb> m_usb;
|
||||
volatile bool b_usbthread;
|
||||
|
@ -80,6 +81,7 @@ private:
|
|||
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 image;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -220,12 +220,13 @@ int GScanO200::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
Stop_scan();//ֹͣɨÃè
|
||||
ResetScanner();
|
||||
auto rollernew = Get_Roller_num();
|
||||
if (get_imgnReaded() != (rollernew - roller_num))
|
||||
set_lose_image_num(std::abs((rollernew - roller_num) - get_imgnReaded()));
|
||||
set_scannum(abs(rollernew - roller_num));
|
||||
return HARDWARE_ERROR;
|
||||
}
|
||||
|
||||
if (!is_scan()) {
|
||||
auto rollernew = Get_Roller_num();
|
||||
set_scannum(abs(rollernew - roller_num));
|
||||
if (devState == DEV_WRONG) {
|
||||
return get_ErrorCode();
|
||||
}
|
||||
|
@ -631,13 +632,6 @@ void GScanO200::usbmain()
|
|||
{
|
||||
m_pImages->setscanflags(false);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1500));
|
||||
auto rollernew= Get_Roller_num();
|
||||
if (get_imgnReaded() != (rollernew - roller_num))
|
||||
{
|
||||
Set_ErrorCode(LOSE_IMAGE);
|
||||
set_lose_image_num(std::abs((rollernew - roller_num) - get_imgnReaded()));
|
||||
haveError = true;
|
||||
}
|
||||
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
|
||||
//m_pImages->setscanflags(false);
|
||||
//devState = DEV_STOP;
|
||||
|
|
|
@ -212,6 +212,7 @@ int GScanO400::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
this_thread::sleep_for(chrono::milliseconds(1));
|
||||
if (sw.elapsed_s() > 30.00)
|
||||
{
|
||||
int roller_num_new = Get_Roller_num();
|
||||
if (m_threadUsb && m_threadUsb->joinable()) {
|
||||
devState = DEV_STOP;
|
||||
m_threadUsb->join();
|
||||
|
@ -220,10 +221,13 @@ int GScanO400::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
|||
}
|
||||
Stop_scan();//ֹͣɨÃè
|
||||
ResetScanner();
|
||||
set_scannum(abs(roller_num_new - roller_num));
|
||||
return HARDWARE_ERROR;
|
||||
}
|
||||
|
||||
if (!is_scan()) {
|
||||
int roller_num_new = Get_Roller_num();
|
||||
set_scannum(abs(roller_num_new - roller_num));
|
||||
if (devState == DEV_WRONG) {
|
||||
return get_ErrorCode();
|
||||
}
|
||||
|
@ -680,13 +684,6 @@ void GScanO400::usbmain()
|
|||
{
|
||||
m_pImages->setscanflags(false);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1500));
|
||||
auto rollernew = Get_Roller_num();
|
||||
if (get_imgnReaded() != (rollernew - roller_num))
|
||||
{
|
||||
Set_ErrorCode(LOSE_IMAGE);
|
||||
set_lose_image_num(std::abs((rollernew - roller_num) - get_imgnReaded()));
|
||||
haveError = true;
|
||||
}
|
||||
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -24,15 +24,16 @@ static std::map<PaperStatus, unsigned int> SupPaperTyps = {
|
|||
{{TwSS::B6,PaperAlign::Rot0},10},
|
||||
{{TwSS::B6,PaperAlign::Rot270},11},
|
||||
{{TwSS::USLetter,PaperAlign::Rot0},14},
|
||||
{{TwSS::USLetter,PaperAlign::Rot270},15},
|
||||
{{TwSS::USLedger,PaperAlign::Rot0},12},
|
||||
{{TwSS::USLegal,PaperAlign::Rot0},13},
|
||||
{{TwSS::None,PaperAlign::Rot0},0},
|
||||
#ifdef G1003399
|
||||
{{TwSS::USLetter,PaperAlign::Rot270},14},
|
||||
{{TwSS::USStatement,PaperAlign::Rot0},17},
|
||||
{{TwSS::MaxSize,PaperAlign::Rot0},19},
|
||||
{{TwSS::Trigeminy,PaperAlign::Rot0},17}
|
||||
#else
|
||||
{ {TwSS::USLetter,PaperAlign::Rot270},15},
|
||||
{{TwSS::USStatement,PaperAlign::Rot0},16},
|
||||
{{TwSS::MaxSize,PaperAlign::Rot0},16},
|
||||
{{TwSS::Trigeminy,PaperAlign::Rot0},16}
|
||||
|
@ -118,6 +119,7 @@ enum HGType
|
|||
FPGA,
|
||||
V4L2,
|
||||
IMG,
|
||||
AutoCorrect,
|
||||
STOPSCAN,
|
||||
};
|
||||
|
||||
|
@ -161,7 +163,13 @@ enum Scanner_Reg_Defs
|
|||
SR_GET_SERIALNUM,
|
||||
SR_SET_SERIALNUM,
|
||||
SR_CONFIF_IMGPROCPARAM,
|
||||
SR_PAPER_READY,
|
||||
SC_AUTOCORRECT,
|
||||
SR_KEEP_LAST_IMG,
|
||||
SR_UPDATA_START = 0x100,
|
||||
SR_UPDATA_STAUTUS = 0x101,
|
||||
SR_UPDATA_MD5_RELUST = 0x102,
|
||||
SR_UPDATA_RECOVERY = 0x103,
|
||||
SR_UPDATA_REBOOT = 0x104,
|
||||
};
|
||||
|
||||
enum Scanner_Cmd_Defs
|
||||
|
|
|
@ -173,8 +173,9 @@ void ImageMatQueue::setparam(const GScanCap& param)
|
|||
#else // REAL300DPI
|
||||
fixedSize = papersize.GetPaperSize(param.papertype, 200.0f, param.paperAlign);
|
||||
#endif
|
||||
bool normalCrop = ((param.autodescrew) || (islongcustomcrop ? islongcustomcrop : param.is_autocrop)||(param.fillbackground)) ? false : param.normalCrop;
|
||||
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyAutoCrop(islongcustomcrop ? islongcustomcrop : param.is_autocrop,
|
||||
param.autodescrew, param.fillbackground, cv::Size(fixedSize.cx, fixedSize.cy), param.is_convex,param.AutoCrop_threshold,param.noise,param.indent)));
|
||||
param.autodescrew, param.fillbackground, cv::Size(fixedSize.cx, fixedSize.cy), param.is_convex,false,param.AutoCrop_threshold,param.noise,param.indent,normalCrop)));
|
||||
|
||||
/* m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyAutoCrop(true, param.autodescrew, param.fillbackground, cv::Size(fixedSize.cx, fixedSize.cy), param.is_convex, false, param.AutoCrop_threshold, param.noise, param.indent)));
|
||||
if(!(islongcustomcrop ? islongcustomcrop : param.is_autocrop))
|
||||
|
|
|
@ -54,6 +54,7 @@ const std::string GAMMA_ = "dGamma";
|
|||
|
||||
|
||||
//<!图像处理选项卡
|
||||
const std::string CROPMODEL = "bcropmodel";
|
||||
const std::string FILTERTYPE = "iFilter";
|
||||
const std::string ENHANCECOLOR = "iEnhance";
|
||||
const std::string SHARPENTYPE = "iSharpen";
|
||||
|
@ -231,6 +232,7 @@ struct GScanCap
|
|||
float threshold; /**< Threshold */
|
||||
uint8_t is_autocontrast; /**< 自动对比度*/
|
||||
uint8_t is_autocrop; /**< 自动裁切*/
|
||||
bool normalCrop; /**<传统模式自动裁切*/
|
||||
uint8_t is_autodiscradblank_normal; /**< 自动丢弃空白页通用*/
|
||||
int discardblank_percent; /**<跳过空白页阀值*/
|
||||
uint8_t is_autodiscradblank_vince;/**自动丢弃空白页发票*/
|
||||
|
|
|
@ -20,67 +20,68 @@ GscanJsonConfig::~GscanJsonConfig()
|
|||
GScanCap GscanJsonConfig::GetDefaultGscancapValue()
|
||||
{
|
||||
GScanCap gcap;
|
||||
|
||||
/*< basic page setting*/
|
||||
gcap.pixtype = 2;//默认彩色
|
||||
gcap.automaticcolor = FALSE;
|
||||
gcap.automaticcolortype = 1;
|
||||
gcap.paperAlign = PaperAlign::Rot0;
|
||||
gcap.papertype = 0;//TwSS::NONE
|
||||
gcap.en_sizecheck = FALSE;
|
||||
|
||||
#ifdef UV
|
||||
gcap.hardwarecaps.en_uv = FALSE;
|
||||
#endif
|
||||
gcap.is_autocrop = TRUE;//默认自动裁切
|
||||
gcap.is_duplex = TRUE;
|
||||
gcap.is_autodiscradblank_normal = FALSE;
|
||||
gcap.is_autodiscradblank_vince = FALSE;
|
||||
gcap.discardblank_percent = 20;
|
||||
gcap.is_switchfrontback = FALSE;
|
||||
gcap.resolution_dst = 200.0f;
|
||||
gcap.resolution_native = 200.0f;
|
||||
|
||||
/*< brightness setting*/
|
||||
gcap.brightness = 0.0f;//默认亮度为0
|
||||
gcap.contrast = 0.0f;//默认对比度为0
|
||||
gcap.threshold = 128;
|
||||
gcap.gamma = 1.0;
|
||||
gcap.is_autocontrast = FALSE;//默认不自动对比度
|
||||
|
||||
/*< image proecss setting*/
|
||||
gcap.autodescrew = TRUE;//自动纠偏 可用
|
||||
gcap.enhance_color = EnchaceColor::Enhance_None;//默认不进行颜色增强
|
||||
gcap.en_fold = FALSE;//默认不对折
|
||||
gcap.fillbackground = true;//默认不填黑框
|
||||
gcap.fillhole.is_fillhole = FALSE;
|
||||
gcap.fillhole.fillholeratio = 10;
|
||||
gcap.detachnoise.detachnoise = 30;
|
||||
gcap.detachnoise.is_detachnoise = FALSE;
|
||||
gcap.filter = 3;//对应Filter::None
|
||||
gcap.multi_output_red = FALSE;
|
||||
gcap.sharpen = SharpenBlur::Sharpen_None;
|
||||
gcap.hsvcorrect = FALSE;//默认不开启答题卡除红
|
||||
|
||||
/*< feeder setting*/
|
||||
gcap.hardwarecaps.en_doublefeed = TRUE;//默认开启双张
|
||||
gcap.hardwarecaps.en_skrewdetect = TRUE;//默认开启歪斜检测
|
||||
gcap.hardwarecaps.en_stapledetect = FALSE;//默认不开启订书针检测
|
||||
gcap.hardwarecaps.skrewdetectlevel = 3;//默认处于3挡
|
||||
gcap.hardwarecaps.capturepixtype = 2;//彩色模式
|
||||
gcap.imageRotateDegree = 0.0f;//默认不进行旋转
|
||||
gcap.is_autotext = FALSE;
|
||||
gcap.is_backrotate180 = FALSE;
|
||||
gcap.AutoCrop_threshold = 40;
|
||||
gcap.is_convex = TRUE;
|
||||
gcap.noise = 8;
|
||||
gcap.indent = 5;
|
||||
gcap.is_dogeardetection = FALSE;
|
||||
gcap.scannum = -1;//默认连续扫描
|
||||
gcap.hardwarecaps.lowpowermode = (LowPowerMode)4;
|
||||
//gcap.scanrect = { 0 };
|
||||
|
||||
gcap = JsonToGscancap(GetDefaultJson());
|
||||
return gcap;
|
||||
// /*< basic page setting*/
|
||||
// gcap.pixtype = 2;//默认彩色
|
||||
// gcap.automaticcolor = FALSE;
|
||||
// gcap.automaticcolortype = 1;
|
||||
// gcap.paperAlign = PaperAlign::Rot0;
|
||||
// gcap.papertype = 0;//TwSS::NONE
|
||||
// gcap.en_sizecheck = FALSE;
|
||||
//
|
||||
//#ifdef UV
|
||||
// gcap.hardwarecaps.en_uv = FALSE;
|
||||
//#endif
|
||||
// gcap.is_autocrop = TRUE;//默认自动裁切
|
||||
// gcap.is_duplex = TRUE;
|
||||
// gcap.is_autodiscradblank_normal = FALSE;
|
||||
// gcap.is_autodiscradblank_vince = FALSE;
|
||||
// gcap.discardblank_percent = 20;
|
||||
// gcap.is_switchfrontback = FALSE;
|
||||
// gcap.resolution_dst = 200.0f;
|
||||
// gcap.resolution_native = 200.0f;
|
||||
//
|
||||
// /*< brightness setting*/
|
||||
// gcap.brightness = 0.0f;//默认亮度为0
|
||||
// gcap.contrast = 0.0f;//默认对比度为0
|
||||
// gcap.threshold = 128;
|
||||
// gcap.gamma = 1.0;
|
||||
// gcap.is_autocontrast = FALSE;//默认不自动对比度
|
||||
//
|
||||
// /*< image proecss setting*/
|
||||
// gcap.autodescrew = TRUE;//自动纠偏 可用
|
||||
// gcap.enhance_color = EnchaceColor::Enhance_None;//默认不进行颜色增强
|
||||
// gcap.en_fold = FALSE;//默认不对折
|
||||
// gcap.fillbackground = true;//默认不填黑框
|
||||
// gcap.fillhole.is_fillhole = FALSE;
|
||||
// gcap.fillhole.fillholeratio = 10;
|
||||
// gcap.detachnoise.detachnoise = 30;
|
||||
// gcap.detachnoise.is_detachnoise = FALSE;
|
||||
// gcap.filter = 3;//对应Filter::None
|
||||
// gcap.multi_output_red = FALSE;
|
||||
// gcap.sharpen = SharpenBlur::Sharpen_None;
|
||||
// gcap.hsvcorrect = FALSE;//默认不开启答题卡除红
|
||||
//
|
||||
// /*< feeder setting*/
|
||||
// gcap.hardwarecaps.en_doublefeed = TRUE;//默认开启双张
|
||||
// gcap.hardwarecaps.en_skrewdetect = TRUE;//默认开启歪斜检测
|
||||
// gcap.hardwarecaps.en_stapledetect = FALSE;//默认不开启订书针检测
|
||||
// gcap.hardwarecaps.skrewdetectlevel = 3;//默认处于3挡
|
||||
// gcap.hardwarecaps.capturepixtype = 2;//彩色模式
|
||||
// gcap.imageRotateDegree = 0.0f;//默认不进行旋转
|
||||
// gcap.is_autotext = FALSE;
|
||||
// gcap.is_backrotate180 = FALSE;
|
||||
// gcap.AutoCrop_threshold = 40;
|
||||
// gcap.is_convex = TRUE;
|
||||
// gcap.noise = 8;
|
||||
// gcap.indent = 5;
|
||||
// gcap.is_dogeardetection = FALSE;
|
||||
// gcap.scannum = -1;//默认连续扫描
|
||||
// gcap.hardwarecaps.lowpowermode = (LowPowerMode)4;
|
||||
// //gcap.scanrect = { 0 };
|
||||
//
|
||||
// return gcap;
|
||||
}
|
||||
|
||||
void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::string path)
|
||||
|
|
|
@ -8,21 +8,24 @@ CImageApplyAutoCrop::CImageApplyAutoCrop()
|
|||
, m_isConvexHull(true)
|
||||
, m_isFillColor(false)
|
||||
, m_threshold(40)
|
||||
, m_noise(2)
|
||||
, m_noise(8)
|
||||
, m_indent(5)
|
||||
, m_normalCrop(false)
|
||||
{
|
||||
}
|
||||
|
||||
CImageApplyAutoCrop::CImageApplyAutoCrop(bool isCrop, bool isDesaskew, bool isFillBlank, const cv::Size& fixedSize, bool isConvex, double threshold, int noise, int indent)
|
||||
CImageApplyAutoCrop::CImageApplyAutoCrop(bool isCrop, bool isDesaskew, bool isFillBlank, const cv::Size& fixedSize, bool isConvex, bool isFillColor,
|
||||
double threshold, int noise, int indent, bool normalCrop)
|
||||
: m_isCrop(isCrop)
|
||||
, m_isDesaskew(isDesaskew)
|
||||
, m_isFillBlank(isFillBlank)
|
||||
, m_isConvexHull(isConvex)
|
||||
, m_isFillColor(false)
|
||||
, m_isFillColor(isFillColor)
|
||||
, m_threshold(threshold)
|
||||
, m_noise(noise)
|
||||
, m_indent(indent)
|
||||
, m_fixedSize(fixedSize)
|
||||
, m_normalCrop(normalCrop)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -34,7 +37,11 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
{
|
||||
(void)side;
|
||||
if (pDib.empty()) return;
|
||||
if (!m_isCrop && !m_isDesaskew && !m_isFillBlank && m_fixedSize.empty()) return;
|
||||
if (!m_isCrop && !m_isDesaskew && !m_isFillBlank && m_normalCrop/* && m_fixedSize.empty()*/)
|
||||
{
|
||||
pDib = pDib(cv::Rect((pDib.cols - m_fixedSize.width) / 2, side == 0 ? 75 : 145, m_fixedSize.width, m_fixedSize.height) & cv::Rect(0, 0, pDib.cols, pDib.rows)).clone();
|
||||
return;
|
||||
}
|
||||
|
||||
cv::Mat src = pDib;
|
||||
cv::Mat thre;
|
||||
|
@ -43,7 +50,7 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
|
||||
if (m_noise > 0)
|
||||
{
|
||||
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(m_noise, m_noise));
|
||||
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(m_noise, 1));
|
||||
cv::morphologyEx(thre, thre, cv::MORPH_OPEN, element);
|
||||
}
|
||||
std::vector<cv::Vec4i> hierarchy;
|
||||
|
@ -55,6 +62,12 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
if (m_maxContour.size() == 0)
|
||||
{
|
||||
thre.release();
|
||||
//如果是固定幅面,须返回裁切后的尺寸
|
||||
if (!m_isCrop)
|
||||
pDib = pDib(cv::Rect((pDib.cols - m_fixedSize.width) / 2, (pDib.rows - m_fixedSize.height) / 2, m_fixedSize.width, m_fixedSize.height) & cv::Rect(0, 0, pDib.cols, pDib.rows)).clone();
|
||||
#ifdef LOG
|
||||
FileTools::write_log("imgprc.txt", "exit CImageApplyAutoCrop apply");
|
||||
#endif // LOG
|
||||
return;
|
||||
}
|
||||
thre.release();
|
||||
|
@ -96,6 +109,8 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
m_maxContour.push_back(cv::Point(dst.cols, -1));
|
||||
m_maxContour.push_back(cv::Point(dst.cols, dst.rows));
|
||||
|
||||
|
||||
cv::Scalar autoBGColor;
|
||||
if (m_isFillBlank)
|
||||
{
|
||||
cv::Mat thre_dst;
|
||||
|
@ -129,7 +144,8 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
contours[contours.size() - 1].push_back(cv::Point(dst.cols, -1));
|
||||
contours[contours.size() - 1].push_back(cv::Point(dst.cols, dst.rows));
|
||||
|
||||
hg::fillPolys(dst, contours, m_isFillColor ? getBackGroudColor(pDib, rect.size.area()) : cv::Scalar(255, 255, 255));
|
||||
autoBGColor = m_isFillColor ? getBackGroudColor(pDib, rect.size.area()) : cv::Scalar(255, 255, 255);
|
||||
hg::fillPolys(dst, contours, autoBGColor);
|
||||
}
|
||||
|
||||
pDib.release();
|
||||
|
@ -137,7 +153,7 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
pDib = dst.clone();
|
||||
else
|
||||
{
|
||||
pDib = cv::Mat(m_fixedSize, dst.type(), m_isFillBlank ? cv::Scalar(255, 255, 255) : cv::Scalar(0, 0, 0));
|
||||
pDib = cv::Mat(m_fixedSize, dst.type(), m_isFillBlank ? autoBGColor : cv::Scalar(0, 0, 0));
|
||||
|
||||
cv::Rect roi;
|
||||
roi.x = dst.cols > pDib.cols ? (dst.cols - pDib.cols) / 2 : 0;
|
||||
|
@ -154,12 +170,9 @@ void CImageApplyAutoCrop::apply(cv::Mat& pDib, int side)
|
|||
|
||||
void CImageApplyAutoCrop::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
|
||||
{
|
||||
m_rects.clear();
|
||||
if (mats.empty()) return;
|
||||
if (!mats[0].empty()) {
|
||||
apply(mats[0], 0);
|
||||
m_rects.push_back(m_rect);
|
||||
//cv::imwrite("1.bmp", mats[0]);
|
||||
}
|
||||
|
||||
if (isTwoSide && mats.size() > 1)
|
||||
|
@ -167,11 +180,8 @@ void CImageApplyAutoCrop::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
|
|||
cv::Size dSize = m_fixedSize;
|
||||
if (!mats[0].empty())
|
||||
m_fixedSize = mats[0].size();
|
||||
|
||||
if (!mats[1].empty()) {
|
||||
apply(mats[1], 1);
|
||||
m_rects.push_back(m_rect);
|
||||
//cv::imwrite("1.bmp", mats[0]);
|
||||
}
|
||||
|
||||
if (!mats[0].empty())
|
||||
|
|
|
@ -26,6 +26,7 @@ class CImageApplyAutoCrop : public CImageApply
|
|||
public:
|
||||
CImageApplyAutoCrop();
|
||||
|
||||
|
||||
/*
|
||||
* isCrop [in]:自动幅面裁剪使能,true自动裁剪,false为固定裁剪
|
||||
* isDesaskew [in]:自动纠偏使能,true自动纠偏,false为不纠偏
|
||||
|
@ -34,10 +35,12 @@ public:
|
|||
* isConvex [in]:黑底填充时的填充方式,true为凸多边形填充,false为凹多边形填充,默认true
|
||||
* isFillColor [in]:黑底填充时采用自适应色彩填充,false为白色填充,true为自适应文稿底色填充,默认false
|
||||
* threshold [in]:二值化阈值,取值范围(0, 255),默认40
|
||||
* noise [in]:除噪像素,能够消除noise宽度的背景竖条纹干扰,默认40
|
||||
* noise [in]:除噪像素,能够消除noise宽度的背景竖条纹干扰,默认2
|
||||
* indent [in]:轮廓缩进,裁剪、纠偏或者黑底填充时,对探索到的纸张轮廓进行缩进indent像素,默认5
|
||||
* normalCrop [in]:为true且m_isCrop m_isDesaskew m_isFillBlank均为false时生效,固定裁切采用最传统的裁切方式,默认false
|
||||
*/
|
||||
CImageApplyAutoCrop(bool isCrop, bool isDesaskew, bool isFillBlank, const cv::Size& fixedSize, bool isConvex = true, double threshold = 40, int noise = 8, int indent = 5);
|
||||
CImageApplyAutoCrop(bool isCrop, bool isDesaskew, bool isFillBlank, const cv::Size& fixedSize, bool isConvex = true,
|
||||
bool isFillColor = false, double threshold = 40, int noise = 8, int indent = 5, bool normalCrop = false);
|
||||
|
||||
virtual ~CImageApplyAutoCrop();
|
||||
|
||||
|
@ -98,6 +101,7 @@ private:
|
|||
double m_threshold;
|
||||
int m_noise;
|
||||
int m_indent;
|
||||
bool m_normalCrop; //为true且m_isCrop m_isDesaskew m_isFillBlank均为false时生效,固定裁切采用最传统的裁切方式
|
||||
cv::Size m_fixedSize;
|
||||
cv::RotatedRect m_rect;
|
||||
std::vector<cv::Point> m_maxContour;
|
||||
|
|
|
@ -59,6 +59,7 @@ enum class CapTypeEx : unsigned short {
|
|||
TwEx_SizeDetect = 0x8103,
|
||||
TwEx_LowPowerMode = 0x8104,
|
||||
TwEx_ENCODE = 0x8105,
|
||||
TwEx_CropModel=0x8106,
|
||||
};
|
||||
|
||||
enum class PaperSizeEx : unsigned short {
|
||||
|
@ -86,7 +87,7 @@ using namespace std::placeholders;
|
|||
TWPP_ENTRY_MFC(HuagaoDs)
|
||||
|
||||
static constexpr const Identity srcIdent(
|
||||
Version(3, 3, Language::English, Country::China, "v3.3.5.0"),
|
||||
Version(3, 3, Language::English, Country::China, "v3.3.5.1"),
|
||||
DataGroup::Image,
|
||||
#ifdef MAKEHUAGAO
|
||||
"HUAGO",
|
||||
|
@ -344,37 +345,41 @@ HuagaoDs::HuagaoDs()
|
|||
void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
|
||||
{
|
||||
if (scanner.get()) {
|
||||
int losemun = scanner->get_lose_image_num();
|
||||
int num = 0;
|
||||
bool is_duplex = m_scanparam->is_duplex;
|
||||
int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
||||
#ifdef G1003399
|
||||
is_duplex = false;
|
||||
int readnum =scanner->get_scannum()* (m_scanparam->is_duplex ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
||||
#else
|
||||
int readnum = scanner->get_scannum();
|
||||
#endif // G1003399
|
||||
|
||||
if ((retcode == 64 || retcode == 8 || retcode == 16) && losemun > 0)//64 ->SStop
|
||||
losemun--;
|
||||
|
||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||
{
|
||||
if (is_duplex && m_scanparam->en_fold && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
else if (is_duplex && m_scanparam->en_fold)
|
||||
num = scanner->get_imgnReaded() - scanner->get_imgTransfered();
|
||||
else if (is_duplex && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 4 - scanner->get_imgTransfered();
|
||||
else if ((!is_duplex) && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
else if (!is_duplex)
|
||||
num = scanner->get_imgnReaded() - scanner->get_imgTransfered();
|
||||
else
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
}
|
||||
if ((losemun != 0) || (num != 0)) {
|
||||
text += "进纸" + to_string(scanner->get_lose_image_num() + scanner->get_imgnReaded()) +
|
||||
if ((retcode == 64 || retcode == 8 || retcode == 16)) {
|
||||
num = (scanner->get_scannum()-1) * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
||||
#ifdef G1003399
|
||||
int readnum = (scanner->get_scannum() -1)* (m_scanparam->is_duplex ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
||||
#else
|
||||
int readnum = scanner->get_scannum()-1;
|
||||
#endif // G1003399
|
||||
if (((num - scanner->get_imgTransfered()) > 0)||((readnum-scanner->get_imgnReaded())>0)) {
|
||||
text += "进纸" + to_string(scanner->get_scannum()-1) +
|
||||
",扫描" + to_string(scanner->get_imgnReaded()) + ",上传" + to_string(scanner->get_imgTransfered()) +
|
||||
",扫描相差" + to_string(losemun) + "份文件,上传相差" + to_string(num) + "份文件!";
|
||||
",扫描相差" + to_string(readnum - scanner->get_imgnReaded()) + "份文件,上传相差" + to_string(num - scanner->get_imgTransfered()) + "份文件!";
|
||||
scanner->set_lose_image_num(0);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (((num - scanner->get_imgTransfered()) != 0) || ((readnum - scanner->get_imgnReaded()) != 0)) {
|
||||
text += "进纸" + to_string(scanner->get_scannum()) +
|
||||
",扫描" + to_string(scanner->get_imgnReaded()) + ",上传" + to_string(scanner->get_imgTransfered()) +
|
||||
",扫描相差" + to_string(readnum - scanner->get_imgnReaded()) + "份文件,上传相差" + 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);
|
||||
}
|
||||
|
||||
|
@ -766,6 +771,18 @@ void HuagaoDs::SetResoluton(const char* path, int resolution)
|
|||
delete[]buf;
|
||||
}
|
||||
|
||||
void HuagaoDs::dogear_callback(int indexpaper)
|
||||
{
|
||||
CString text;
|
||||
text.Format(_T("74 %d"), indexpaper);
|
||||
//ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), text, NULL, SW_HIDE);
|
||||
showmsg("警告","在"+to_string(indexpaper)+"检测到折角!");
|
||||
scanner->Stop_scan();
|
||||
//scanner->reset();
|
||||
scanner->ResetScanner();
|
||||
onDeviceEvent(DOG_EAR);
|
||||
}
|
||||
|
||||
|
||||
Result HuagaoDs::identityOpenDs(const Identity&) {
|
||||
hMutex = CreateMutex(NULL, FALSE, _T("LookitApp"));
|
||||
|
@ -951,28 +968,29 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
|
||||
m_query[CapType::IPixelType] = msgSupportGetAllSetReset;
|
||||
m_caps[CapType::IPixelType] = [this](Msg msg, Capability& data) -> Result {
|
||||
if (Msg::Set == msg) {
|
||||
if( Msg::Set==msg) {
|
||||
auto mech = data.currentItem<CapType::IPixelType>();
|
||||
if (mech == PixelType::Rgb || mech == PixelType::Gray || mech == PixelType::BlackWhite)
|
||||
{
|
||||
m_scanparam->pixtype = (int)mech;
|
||||
if (m_scanparam->pixtype == (int)PixelType::Rgb) {
|
||||
if (m_scanparam->pixtype == (int)PixelType::Rgb){
|
||||
m_scanparam->filter = (BYTE)Filter::None;
|
||||
m_scanparam->enhance_color = (BYTE)Enchace_Color::Enhance_None;
|
||||
m_scanparam->automaticcolor = FALSE;
|
||||
}
|
||||
else {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
//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);
|
||||
return success();
|
||||
|
@ -1499,7 +1517,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
m_caps[(CapType)(CapTypeEx::TwEx_CropNoise)] = [this](Msg msg, Capability& data)->Result {
|
||||
if (Msg::Set == msg) {
|
||||
auto mech = data.currentItem<UInt32>();
|
||||
if ((mech > 50 || mech < 0) && ((bool)m_scanparam->is_autocrop == true))
|
||||
if ((mech > 10 || mech < 0) && ((bool)m_scanparam->is_autocrop == true))
|
||||
return badValue();
|
||||
m_scanparam->noise = mech;
|
||||
return success();
|
||||
|
@ -1640,13 +1658,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
if (mech != (BYTE)Enchace_Color::Enhance_None)
|
||||
m_scanparam->filter = (BYTE)Filter::None;
|
||||
|
||||
if (m_scanparam->pixtype == (int)PixelType::BlackWhite)//黑白默认开启红色增强 其他增强不生效
|
||||
{
|
||||
if (m_scanparam->enhance_color == (BYTE)Enchace_Color::Enhance_None)
|
||||
{
|
||||
m_scanparam->enhance_color = (BYTE)Enchace_Color::Enhance_Red;
|
||||
}
|
||||
}
|
||||
//if (m_scanparam->pixtype == (int)PixelType::BlackWhite)
|
||||
//{
|
||||
// if (m_scanparam->enhance_color == (BYTE)Enchace_Color::Enhance_None)
|
||||
// {
|
||||
// m_scanparam->enhance_color = (BYTE)Enchace_Color::Enhance_Red;
|
||||
// }
|
||||
//}
|
||||
return success();
|
||||
}
|
||||
}
|
||||
|
@ -1843,6 +1861,22 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
};
|
||||
#endif // LANXUM
|
||||
|
||||
m_query[(CapType)(CapTypeEx::TwEx_CropModel)] = msgSupportGetAllSetReset;
|
||||
m_caps[(CapType)(CapTypeEx::TwEx_CropModel)] = [this](Msg msg, Capability& data)->Result {
|
||||
if (Msg::Set == msg) {
|
||||
auto mech = data.currentItem<UInt32>();
|
||||
if (m_scanparam->fillbackground ||
|
||||
m_scanparam->autodescrew ||
|
||||
m_scanparam->is_autocrop ||
|
||||
m_scanparam->en_fold)
|
||||
{
|
||||
return badValue();
|
||||
}
|
||||
m_scanparam->normalCrop = (bool)mech;
|
||||
return success();
|
||||
}
|
||||
return CapSupGetAllResetEx<bool, UInt32, (CapType)CapTypeEx::TwEx_CropModel>(msg, data, m_scanparam->normalCrop, false);
|
||||
};
|
||||
#ifdef UV
|
||||
m_query[(CapType)(CapTypeEx::TwEx_UVModel)] = msgSupportGetAllSetReset;
|
||||
m_caps[(CapType)(CapTypeEx::TwEx_UVModel)] = [this](Msg msg, Capability& data)->Result {
|
||||
|
@ -1925,25 +1959,8 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
|
|||
{
|
||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||
{
|
||||
int num = 0;
|
||||
bool is_duplex = m_scanparam->is_duplex;
|
||||
#ifdef G1003399
|
||||
is_duplex = false;
|
||||
#endif // G1003399
|
||||
|
||||
if (is_duplex && m_scanparam->en_fold && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
else if (is_duplex && m_scanparam->en_fold)
|
||||
num = scanner->get_imgnReaded() - scanner->get_imgTransfered();
|
||||
else if (is_duplex && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 4 - scanner->get_imgTransfered();
|
||||
else if ((!is_duplex) && m_scanparam->multi_output_red)
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
else if (!is_duplex)
|
||||
num = scanner->get_imgnReaded() - scanner->get_imgTransfered();
|
||||
else
|
||||
num = scanner->get_imgnReaded() * 2 - scanner->get_imgTransfered();
|
||||
if (num != 0)
|
||||
int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
||||
if ((num - scanner->get_imgTransfered()) != 0)
|
||||
{
|
||||
showmsg("警告", msgs[LOSE_IMAGE]);
|
||||
FileTools::writelog(log_ERROR, msgs[LOSE_IMAGE]);
|
||||
|
@ -2519,7 +2536,6 @@ Twpp::Result HuagaoDs::startScan()
|
|||
if (guiTwain.get()) {
|
||||
((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(false);
|
||||
}
|
||||
|
||||
int retCode = scanner->aquire_bmpdata(*bmpData.get());
|
||||
if (retCode != 0) {
|
||||
scanner->Set_ErrorCode(0);
|
||||
|
|
|
@ -91,6 +91,7 @@ private://method
|
|||
Twpp::UInt32 bmpSize() const noexcept;
|
||||
const char* bmpBegin() const noexcept;
|
||||
const char* bmpEnd() const noexcept;
|
||||
void dogear_callback(int indexpaper);
|
||||
void updataGscanCap();
|
||||
Twpp::Result capCommon(const Twpp::Identity& origin, Twpp::Msg msg, Twpp::Capability& data);
|
||||
void showmsg(std::string caption, std::string text, int retcode=0);
|
||||
|
|
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