1.修复部分参数保存bug

2.针对七天软件崩溃做了优化
3.调整部分协议可用性约束
This commit is contained in:
lovelyyoung 2020-07-11 18:43:17 +08:00
parent 98ee790bac
commit bbb5c44a6e
13 changed files with 261 additions and 155 deletions

View File

@ -11,10 +11,6 @@
std::vector<int> g400hiden =
{
IDC_CKBINDINGDETECT ,
IDC_LBCOUNT ,
IDC_RDCONSISTSCAN,
IDC_RDSPECIFYSCANNUM,
IDC_EDSCANNUM,
IDC_CKSKEWDETECT,
IDC_LBSDL,
IDC_SLDDETECTLEVEL,

View File

@ -238,6 +238,8 @@ int CTwainUI::getCmbDuplexIndex()
ret = 2;
else if (settings->is_autodiscradblank_vince)
ret = 3;
else if (settings->en_fold)
ret = 4;
else if(settings->is_duplex==FALSE)
ret = 0;
return ret;
@ -427,7 +429,7 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
settings->is_autotext = configItem->Orentation == 4;
settings->is_backrotate180 =configItem->EnBackRotate180;
settings->hardwarecaps.en_skrewdetect = configItem->EnScrewDetect;
settings->hardwarecaps.skrewdetectlevel = (float)configItem->ScrewDetectLevel;
settings->hardwarecaps.skrewdetectlevel = (int)configItem->ScrewDetectLevel;
settings->hardwarecaps.en_stapledetect = configItem->EnBindingDetect;
settings->hardwarecaps.en_doublefeed = configItem->EnUltrasonicDetect;
settings->en_fold = configItem->EnFlod ? 1 : 0;

View File

@ -743,10 +743,10 @@ namespace neb
{
return(false);
}
if (pJsonStruct->type != cJSON_Double)
{
return(false);
}
//if (pJsonStruct->type != cJSON_Double)
//{
// return(false);
//}
dValue = pJsonStruct->valuedouble;
return(true);
}
@ -1751,10 +1751,10 @@ namespace neb
{
return(false);
}
if (pJsonStruct->type != cJSON_Double)
{
return(false);
}
//if (pJsonStruct->type != cJSON_Double)
//{
// return(false);
//}
dValue = pJsonStruct->valuedouble;
return(true);
}

View File

@ -62,7 +62,7 @@ typedef enum tagUsbSupported {
PC_SCAN_BUSY_or_ERROR = 73,
//USB δÁ¬½Ó
USB_DISCONNECTED = 200
} UsbSupported, *PUsbSupported;
} UsbSupported, * PUsbSupported;
enum tagEventIndex
@ -79,8 +79,9 @@ class ImageMatQueue;
class IScanner
{
public:
virtual ~IScanner(){};
IScanner() { bFilterMsg = false; }
virtual ~IScanner() { bFilterMsg = true; }
void ResetMsgFiter() { bFilterMsg = true; }
virtual void open(int vid, int pid) = 0;;
virtual int aquire_bmpdata(std::vector<unsigned char>& bmpdata) = 0;
virtual BOOL IsConnected() = 0;
@ -91,19 +92,38 @@ public:
virtual void config_params(GScanCap& params) = 0;
virtual void Scanner_StartScan(UINT16 count) = 0;
virtual void Stop_scan() = 0;
virtual void ResetScanner() =0;
virtual void ResetScanner() = 0;
virtual bool Get_IsImageQueueEmpty() = 0;
virtual void reset() = 0;
virtual void clear_hwerror() = 0;
virtual void setdecodepixtype(int twpixtype)= 0;
virtual void setdecodepixtype(int twpixtype) = 0;
virtual UINT32 get_ErrorCode() = 0;
virtual void Set_ErrorCode(UINT32 value) = 0;
virtual int get_scanned_num() = 0;
void DoEvents() {
MSG msg;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
//if (msg.message != WM_LBUTTONUP)
//{
// DispatchMessage(&msg);
// TranslateMessage(&msg);
//}
//else
//{
// if (!((msg.pt.x >= 240 && msg.pt.x <= 340) && (msg.pt.y >= 170 && msg.pt.y <= 240)))
// {
// DispatchMessage(&msg);
// TranslateMessage(&msg);
// }
//}
if (msg.message != WM_LBUTTONUP && bFilterMsg)
{
bFilterMsg = false;
return;
}
DispatchMessage(&msg);
TranslateMessage(&msg);
}
}
protected:
@ -115,4 +135,5 @@ protected:
std::string fwVersion;
std::string SerialNum;
int pixType;
bool bFilterMsg;
};

View File

@ -140,9 +140,9 @@ typedef enum tagUsbKeyWords : UINT32
//¶ÁÈ¡×ÝÏò»û±äϵÊý
GET_JUST_COF_V
} UsbKeyWords, *PUsbKeyWords;
} UsbKeyWords, * PUsbKeyWords;
GScanO200::GScanO200():
GScanO200::GScanO200() :
m_bread_fixed_ratio_fromDSP(false)
{
m_pImages.reset(new ImageMatQueue());
@ -164,6 +164,31 @@ void GScanO200::open(int vid, int pid)
auto usbs = UsbScan_List::find_vid_pid(vid, pid);
if (!usbs.empty()) {
}
else
{
int ivid, ipid;
#ifdef G200
#ifdef ISG100
ivid = 0x3072;
ipid = 0x0100;
#else
ivid = 0x3072;
ipid = 0x0200;
#endif // ISG100
#elif defined(G300)
ivid = 0x3072;
ipid = 0x0300;
#elif defined(G400)
ivid = 0x3072;
ipid = 0x0400;
#endif // G200
usbs = UsbScan_List::find_vid_pid(ivid, ipid);
}
if (!usbs.empty())
{
m_usb = *usbs.begin();
bool ret = m_usb->open();
if (ret) {
@ -307,6 +332,7 @@ void GScanO200::config_params(GScanCap& params)
UINT32 cfgdata = cfg.GetData();
USBCB usbcb = { CONFIGURED_DATA,cfgdata,0 };
m_usb->write_bulk(&usbcb, sizeof(USBCB));
this_thread::sleep_for(std::chrono::milliseconds(200));
m_pImages->setparam(params);
}
}
@ -455,9 +481,10 @@ void GScanO200::usbhotplug_callback(bool isconnect, void* userdata)
void GScanO200::usbhotplug(bool isleft)
{
if (isleft) {
devState = DEV_WRONG;
Error_Code = USB_DISCONNECTED;
m_pImages->setscanflags(false);
devState = DEV_WRONG;
Error_Code = USB_DISCONNECTED;
m_pImages->setscanflags(false);
m_usb.reset();
}
}
@ -490,14 +517,24 @@ void GScanO200::usbmain()
continue;
}
if (gcap.resolution_dst == 300.0f && gcap.en_fold) {
if (m_pImages->orginimgcount() > 1)
//if (gcap.resolution_dst == 300.0f && gcap.en_fold) {
// if (m_pImages->orginimgcount() > 1)
// {
// this_thread::sleep_for(chrono::milliseconds(100));
// continue;
// }
//}
if (gcap.resolution_dst >= 300.0f)
{
if (m_pImages->orginimgcount() > 2)
{
this_thread::sleep_for(chrono::milliseconds(100));
this_thread::sleep_for(chrono::milliseconds(10));
continue;
}
}
USBCB usbcb = Get_Scanner_Status();
switch (usbcb.u32_Data) {
case HAVE_IMAGE:

View File

@ -132,7 +132,7 @@ void ImageMatQueue::setparam(const GScanCap& param)
+ "\n is_autotext : " + to_string(scanParam.is_autotext) + "\n is_backrotate180 : " + to_string(scanParam.is_backrotate180) + "\n is_duplex : " + to_string(scanParam.is_duplex) + "\n is_switchfrontback : " + to_string(scanParam.is_switchfrontback) + "\n multi_output_red : " + to_string(scanParam.multi_output_red)
+ "\n paperAlign : " + to_string(scanParam.paperAlign) + "\n papertype : " + to_string(scanParam.papertype) + "\n resolution_dst : " + to_string(scanParam.resolution_dst) + "\n scannum : " + to_string(scanParam.scannum) + "\n sharpen : " + to_string(scanParam.sharpen)+
"\n Pixtype : "+to_string(scanParam.pixtype);
FileTools::write_log("2.txt", outinfo);
FileTools::write_log("D:\\2.txt", outinfo);
#endif // DEBUG
m_iaList.clear();

View File

@ -385,8 +385,8 @@ std::vector<CONFIGPARAMS> JsonConfig::parseJsonFromString(const std::string str)
itmEnSwitchFrontBack.Get(i, b_value);
cfp.EnSwitchFrontBack = b_value;
itmBrtnes.Get(i, i_value);
cfp.Brightness= i_value;
itmBrtnes.Get(i, f_value);
cfp.Brightness= f_value;
itmAutoCrnt.Get(i,b_value);
cfp.EnAutoContrast=b_value;
itmContrast.Get(i,i_value);

View File

@ -425,9 +425,22 @@ int GetContrastLevel(float contrast) {
if (contrast >= -1000.0f && contrast < -666.0f) { ret = 1; }
else if (contrast >= -666.0f && contrast < -333.0f) { ret = 2; }
else if (contrast >= -333.0f && contrast < 0.0f) { ret = 3; }
else if (contrast > 0.0f && contrast < 333.0f) { ret = 5; }
else if (contrast >= 333.0f && contrast < 666.0f) { ret = 6; }
else if (contrast >= 666.0f && contrast <= 1000.0f) { ret = 7; }
else if (contrast > 0.0f && contrast <= 333.0f) { ret = 5; }
else if (contrast > 333.0f && contrast <= 666.0f) { ret = 6; }
else if (contrast > 666.0f && contrast <= 1000.0f) { ret = 7; }
return ret;
}
CString GetHidedlgPath()
{
TCHAR szIniFile[MAX_PATH] = { 0 };
SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE);
_tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\hidedlg.exe"));
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);
CString ret(chRtn);
delete[] chRtn;
return ret;
}

View File

@ -264,6 +264,7 @@ float GetContrast(int level);
int GetMappingBrightnessValue(float in);
int GetMappingContrastValue(float in);
int GetContrastLevel(float contrast);
CString GetHidedlgPath();
string getOSInfo();
string getManufactureID();
string getCpuType();

View File

@ -26,7 +26,7 @@ GScanCap GscanJsonConfig::GetDefaultGscancapValue()
gcap.is_duplex = TRUE;
gcap.is_autodiscradblank_normal = FALSE;
gcap.is_autodiscradblank_vince = FALSE;
gcap.is_switchfrontback = TRUE;
gcap.is_switchfrontback = FALSE;
gcap.resolution_dst = 200.0f;
gcap.resolution_native = 200.0f;
@ -55,7 +55,7 @@ GScanCap GscanJsonConfig::GetDefaultGscancapValue()
gcap.hardwarecaps.en_stapledetect = FALSE;//默认不开启订书针检测
gcap.hardwarecaps.skrewdetectlevel = 3;//默认处于3挡
gcap.hardwarecaps.capturepixtype = 2;//彩色模式
gcap.imageRotateDegree = 90.0f;//ĬÈϲ»½øÐÐÐýת
gcap.imageRotateDegree = 0.0f;//ĬÈϲ»½øÐÐÐýת
gcap.is_autotext = FALSE;
gcap.is_backrotate180 = FALSE;
gcap.scannum = -1;//默认连续扫描
@ -82,27 +82,28 @@ void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::strin
outJson["Config"].Add(FLOD, (bool)(gcap.en_fold), false);
outJson["Config"].Add(SWITCHFRONTBACK, (bool)(gcap.is_switchfrontback), false);
outJson["Config"].Add(BRIGHTNESS, (float)(gcap.brightness));
outJson["Config"].Add(BRIGHTNESS, (int)(gcap.brightness));
outJson["Config"].Add(AUTOCONTRAST, (bool)(gcap.is_autocontrast), false);
outJson["Config"].Add(CONTRAST, (float)(gcap.contrast));
outJson["Config"].Add(GAMMA_, (int)(gcap.gamma));
outJson["Config"].Add(CONTRAST, (int)(gcap.contrast));
outJson["Config"].Add(GAMMA_, (double)(gcap.gamma));
outJson["Config"].Add(FILTERTYPE, (int)(gcap.filter));
outJson["Config"].Add(ENHANCECOLOR,((int)gcap.enhance_color));
outJson["Config"].Add(SHARPENTYPE, (int)(gcap.sharpen));
outJson["Config"].Add(AUTODESCREW, (bool)(gcap.autodescrew), false);
outJson["Config"].Add(FILLBLACK, (bool)(gcap.fillbackground), false);
outJson["Config"].Add(MULTIOUTPUT, (bool)(gcap.multi_output_red), false);
outJson["Config"].Add(OUTHOLE, (bool)(gcap.fillhole.is_fillhole), false);
outJson["Config"].Add(OUTHOLERATIO, (int)(gcap.fillhole.fillholeratio));
outJson["Config"].Add(HSVCORRECT, (bool)(gcap.hsvcorrect));
outJson["Config"].Add(HSVCORRECT, (bool)(gcap.hsvcorrect),false);
outJson["Config"].Add(ULTRADETECT, (bool)(gcap.hardwarecaps.en_doublefeed), false);
outJson["Config"].Add(BINDINGDETECT, (bool)(gcap.hardwarecaps.en_stapledetect), false);
outJson["Config"].Add(SCANCOUNT, (int)(gcap.scannum));
outJson["Config"].Add(DOCORIENTATION, (float)(gcap.imageRotateDegree));
outJson["Config"].Add(AUTO_TEXT, (bool)(gcap.is_autocrop),false);
outJson["Config"].Add(DOCORIENTATION, (int)(gcap.imageRotateDegree));
outJson["Config"].Add(AUTO_TEXT, (bool)(gcap.is_autotext),false);
outJson["Config"].Add(BACKROTATE180, (bool)(gcap.is_backrotate180), false);
outJson["Config"].Add(SCREWDETECT, (bool)(gcap.hardwarecaps.en_stapledetect), false);
outJson["Config"].Add(SCREWDETECT, (bool)(gcap.hardwarecaps.en_skrewdetect), false);
outJson["Config"].Add(SCREWLEVEL, (int)(gcap.hardwarecaps.skrewdetectlevel));
outJson["Config"].Add(ITEMCAPTION, (string)(gcap.Caption));
outJson["Config"].Add(SAVEPATH, (string)(gcap.SavePath));
@ -166,7 +167,7 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
root["Config"][PAPARSIZE].Add((int)cfgArray[i].papertype);
root["Config"][PAPERALIGN].Add((int)cfgArray[i].paperAlign);
root["Config"][AUTOCROP].Add(i, (bool)cfgArray[i].is_autocrop);
root["Config"][RESOLUTION].Add(cfgArray[i].resolution_dst);
root["Config"][RESOLUTION].Add((int)cfgArray[i].resolution_dst);
root["Config"][DUPLEX].Add(i,(bool)cfgArray[i].is_duplex);
root["Config"][DISCARBLANK].Add(i, (bool)cfgArray[i].is_autodiscradblank_normal);
root["Config"][DISCARBLANKVINCE].Add(i, (bool)cfgArray[i].is_autodiscradblank_vince);
@ -175,10 +176,10 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
root["Config"][FLOD].Add(i, (bool)cfgArray[i].en_fold);
root["Config"][SWITCHFRONTBACK].Add(i,(bool)cfgArray[i].is_switchfrontback);
root["Config"][BRIGHTNESS].Add(cfgArray[i].brightness);
root["Config"][BRIGHTNESS].Add((int)cfgArray[i].brightness);
root["Config"][AUTOCONTRAST].Add(i, (bool)cfgArray[i].is_autocontrast);
root["Config"][CONTRAST].Add(cfgArray[i].contrast);
root["Config"][GAMMA_].Add(cfgArray[i].gamma);
root["Config"][CONTRAST].Add((int)cfgArray[i].contrast);
root["Config"][GAMMA_].Add((double)cfgArray[i].gamma);
root["Config"][FILTERTYPE].Add((int)cfgArray[i].filter);
root["Config"][ENHANCECOLOR].Add((int)cfgArray[i].enhance_color);
@ -187,17 +188,17 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
root["Config"][FILLBLACK].Add(i, (bool)cfgArray[i].fillbackground);
root["Config"][MULTIOUTPUT].Add(i, (bool)cfgArray[i].multi_output_red);
root["Config"][OUTHOLE].Add(i, (bool)cfgArray[i].fillhole.is_fillhole);
root["Config"][OUTHOLERATIO].Add(cfgArray[i].fillhole.fillholeratio);
root["Config"][OUTHOLERATIO].Add((int)cfgArray[i].fillhole.fillholeratio);
root["Config"][HSVCORRECT].Add(i, (bool)cfgArray[i].hsvcorrect);
root["Config"][ULTRADETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_doublefeed);
root["Config"][BINDINGDETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_stapledetect);
root["Config"][SCANCOUNT].Add((int)cfgArray[i].scannum);
root["Config"][DOCORIENTATION].Add(cfgArray[i].imageRotateDegree);
root["Config"][DOCORIENTATION].Add((int)cfgArray[i].imageRotateDegree);
root["Config"][AUTO_TEXT].Add(i, (bool)cfgArray[i].is_autotext);
root["Config"][BACKROTATE180].Add(i, (bool)cfgArray[i].is_backrotate180);
root["Config"][SCREWDETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_skrewdetect);
root["Config"][SCREWLEVEL].Add(cfgArray[i].hardwarecaps.skrewdetectlevel);
root["Config"][SCREWLEVEL].Add((int)cfgArray[i].hardwarecaps.skrewdetectlevel);
if (cfgArray[i].Caption.c_str() != NULL)
{
@ -299,10 +300,10 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
root["Config"].Get(DISCARBLANK, itmDiscardBlk);
neb::CJsonObject itmDiscardBlkVince;
root["Config"].Get(DISCARBLANKVINCE, itmDiscardBlkVince);
neb::CJsonObject itmDBAreaNum;
root["Config"].Get(DB_AREANUM, itmDBAreaNum);
neb::CJsonObject itmDBDevnMax;
root["Config"].Get(DB_DEVNMAX, itmDBDevnMax);
//neb::CJsonObject itmDBAreaNum;
//root["Config"].Get(DB_AREANUM, itmDBAreaNum);
//neb::CJsonObject itmDBDevnMax;
//root["Config"].Get(DB_DEVNMAX, itmDBDevnMax);
neb::CJsonObject itmEnFlod;
root["Config"].Get(FLOD, itmEnFlod);
neb::CJsonObject itmEnSwitchFrontBack;
@ -396,12 +397,12 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
itmEnSwitchFrontBack.Get(i, b_value);
cfp.is_switchfrontback = b_value ? 1 : 0;
itmBrtnes.Get(i, f_value);
cfp.brightness = f_value;
itmBrtnes.Get(i, i_value);
cfp.brightness = i_value;
itmAutoCrnt.Get(i, b_value);
cfp.is_autocontrast = b_value ? 1 : 0;
itmContrast.Get(i, f_value);
cfp.contrast = f_value;
itmContrast.Get(i, i_value);
cfp.contrast = i_value;
itmGamma.Get(i, f_value);
cfp.gamma = f_value;
@ -430,8 +431,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
cfp.hardwarecaps.en_stapledetect = b_value ? 1 : 0;
itmScanCount.Get(i, i_value);
cfp.scannum = i_value;
itmDocOrientation.Get(i, f_value);
cfp.imageRotateDegree = (int)f_value;
itmDocOrientation.Get(i, i_value);
cfp.imageRotateDegree = i_value;
itmAutotext.Get(i, b_value);
cfp.is_autotext = b_value?1:0;
itmBackRotate.Get(i, b_value);
@ -459,7 +460,7 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
GScanCap cfp;
int index;
bool bvalue;
float fvalue;
double fvalue;
std::string svalue;
root["Config"].Get(PIXTYPE, index);
@ -487,14 +488,14 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
root["Config"].Get(SWITCHFRONTBACK, bvalue);
cfp.is_switchfrontback = bvalue?1:0;
root["Config"].Get(BRIGHTNESS, fvalue);
cfp.brightness = (float)fvalue;
root["Config"].Get(BRIGHTNESS, index);
cfp.brightness = index;
root["Config"].Get(AUTOCONTRAST, bvalue);
cfp.is_autocontrast = bvalue?1:0;
root["Config"].Get(CONTRAST, index);
cfp.contrast = (float)index;
root["Config"].Get(GAMMA_, index);
cfp.gamma = (float)index;
cfp.contrast = index;
root["Config"].Get(GAMMA_, fvalue);
cfp.gamma = fvalue;
root["Config"].Get(FILTERTYPE, index);
cfp.filter = (byte)index;
@ -523,7 +524,7 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
root["Config"].Get(SCANCOUNT, index);
cfp.scannum = index;
root["Config"].Get(DOCORIENTATION, index);
cfp.imageRotateDegree = (float)index;
cfp.imageRotateDegree = index;
root["Config"].Get(AUTO_TEXT, bvalue);
cfp.is_autotext = bvalue?1:0;
root["Config"].Get(BACKROTATE180, bvalue);

View File

@ -314,7 +314,7 @@ int CSmartEdit::SetValue( cdbl dvalue )
if( ! m_bUseFp )
return FALSE;
if( ( dvalue < m_dMin ) || ( dvalue > m_dMax ) )
if( ( dvalue < m_dMin-1e-6 ) || ( dvalue > m_dMax+1e-6 ) )
return FALSE;
CString buf;

View File

@ -138,7 +138,7 @@ static std::unique_ptr<CDialog, void(*)(CDialog*)> guiTwain(nullptr, DeleteWnd);
static std::unique_ptr<CDialog, void(*)(CDialog*)> guiBridge(nullptr, DeleteWnd);
#endif
static std::unique_ptr<CDialogEx, void(*)(CDialog*)> guiIndicator(nullptr, DeleteWnd);
//#define HG_VIRTUAL
#ifndef HG_VIRTUAL
static std::unique_ptr<IScanner> scanner(new GScanO200());
#else
@ -386,17 +386,15 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
bmInfo.biBitCount = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0);
m_iBitdepth = m_scanparam->pixtype == 2 ? 24 : (m_scanparam->pixtype == 1 ? 8 : 0);
scanner->open(0x064B, 0x7823);
//scanner->open(0x3072, 0x0100);
if (!scanner->IsConnected()) {
//MessageBox(NULL, _T("未找到扫描仪!请检查电源或者USB连接线是否接通!"), _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION);
//CString str("201");
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE);
return checkDeviceOnline();
}
hMutex = CreateMutex(NULL, FALSE, _T("LookitApp"));
if (GetLastError() == ERROR_ALREADY_EXISTS) { //如果已经存在同名的Mutex会得到这个错误.
CloseHandle(hMutex);
//MessageBox(NULL, _T("设备已被其他程序占用,请关闭占用程序之后再重试!"), _T("提示"), MB_OK);
//CString str("202");
ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("202"), NULL, SW_HIDE);
return seqError();
}
@ -462,15 +460,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createEnumeration<CapType::ICompression>(
{ Compression::None, Compression::Group4 }, m_compression == Compression::None ? 0 : 1, 0);
return success();
case Msg::Reset:
m_compression = Compression::None;
// fallthrough
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::ICompression>(m_compression);
return success();
case Msg::Reset:
case Msg::GetDefault:
m_compression = Compression::None;
data = Capability::createOneValue<CapType::ICompression>(Compression::None);
return success();
@ -499,7 +495,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::Reset:
m_iBitdepth = 24;
m_iBitdepth = 8;
data = Capability::createOneValue<CapType::IBitDepth>(UInt16(m_iBitdepth));
break;
case Msg::GetCurrent:
@ -507,7 +503,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::GetDefault:
data = Capability::createOneValue<CapType::IBitDepth>(24);
data = Capability::createOneValue<CapType::IBitDepth>(8);
return success();
case Msg::Set: {
@ -548,13 +544,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
{ PixelType::BlackWhite, PixelType::Gray, PixelType::Rgb }, (int)(m_scanparam->pixtype), (int)PixelType::Gray);
return success();
case Msg::Reset:
m_scanparam->pixtype = (byte)PixelType::Gray;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IPixelType>((PixelType)(m_scanparam->pixtype));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->pixtype = (byte)PixelType::Gray;
data = Capability::createOneValue<CapType::IPixelType>(PixelType::Gray);
return success();
@ -594,9 +590,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::Reset:
m_jpegQuality = 80;
return success();
case Msg::GetDefault:
m_jpegQuality = 80;
data = Capability::createOneValue<UInt16>(CapType::IJpegQuality, 80);
return success();
@ -622,15 +617,14 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createEnumeration<CapType::IXferMech>(
{ XferMech::Native, XferMech::Memory, XferMech::File }, m_capXferMech == XferMech::Native ? 0 : (m_capXferMech == XferMech::Memory ? 1 : 2), 0);
return success();
case Msg::Reset:
m_capXferMech = XferMech::Native;
// fallthrough
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IXferMech>(m_capXferMech);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_capXferMech = XferMech::Native;
data = Capability::createOneValue<CapType::IXferMech>(XferMech::Native);
return success();
@ -672,6 +666,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
}
case Msg::GetDefault:
case Msg::Reset: {
m_scanparam->resolution_dst = 200.0f;
data = Capability::createOneValue(data.type(), Fix32(200.0));
return success();
}
@ -731,27 +726,27 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->papertype =(int)PaperSize::A3;
data = Capability::createOneValue(data.type(), UInt16(PaperSize::A3));
return success();
case Msg::Set: {
auto res = data.currentItem<UInt16>();
auto paper = data.currentItem<UInt16>();
std::list<UInt16>::iterator resIter = paperSizeList.begin();
bool contains = false;
for (resIter; resIter != paperSizeList.end(); resIter++) {
if (*resIter == res) {
if (*resIter == paper) {
contains = true;
break;
}
}
if (contains) {
m_scanparam->papertype = (byte)res;
if (res == (byte)PaperSize::None)
{
m_scanparam->autodescrew = 1;//设置papertype为NONE 则默认自动裁切
m_scanparam->papertype = (byte)paper;
if (paper == (byte)PaperSize::None)
m_scanparam->paperAlign = PaperAlign::Rot0;
}
m_autosize = paper == (byte)PaperSize::None? (UInt16)AutoSize::Auto:(UInt16)AutoSize::None;
m_autoboarderdetcet = paper == (byte)PaperSize::None;
m_scanparam->is_autocrop = paper == (byte)PaperSize::None?1:0;
return success();
}
return badValue();
@ -768,14 +763,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createEnumeration<CapType::IOrientation>(
{ Orientation::Portrait, Orientation::Landscape }, m_scanparam->paperAlign, 0);
return success();
case Msg::Reset:
m_scanparam->paperAlign = PaperAlign::Rot0;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IOrientation>((Orientation)(m_scanparam->paperAlign));
return success();
case Msg::Reset:
case Msg::GetDefault:
m_scanparam->paperAlign = PaperAlign::Rot0;
data = Capability::createOneValue<CapType::IOrientation>(Orientation::Portrait);
return success();
@ -807,19 +800,18 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
}
}
data = Capability::createEnumeration<CapType::IRotation>(
{ Fix32(0.0),Fix32(90.0),Fix32(180.0),Fix32(270.0) },
{ Fix32(0.0f),Fix32(90.0f),Fix32(180.0f),Fix32(270.0f) },
index == -1 ? 0 : index,
0);
return success();
}
case Msg::Reset:
m_scanparam->imageRotateDegree = 0.0;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IRotation>(Fix32(m_scanparam->imageRotateDegree));
return success();
case Msg::Reset:
case Msg::GetDefault:
data = Capability::createOneValue<CapType::IRotation>(Fix32(0.0));
m_scanparam->imageRotateDegree = 0.0f;
data = Capability::createOneValue<CapType::IRotation>(Fix32(0.0f));
return success();
case Msg::Set: {
@ -868,15 +860,14 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
{ Bool(), Bool(true) }, Bool(m_bIndicator));
return success();
case Msg::Reset:
m_bIndicator = true;
// fallthrough
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::Indicators>(m_bIndicator);
return success();
case Msg::Reset:
case Msg::GetDefault:
data = Capability::createOneValue<CapType::Indicators>(false);
m_bIndicator = true;
data = Capability::createOneValue<CapType::Indicators>(m_bIndicator);
return success();
case Msg::Set: {
@ -902,13 +893,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createOneValue<CapType::FeederEnabled>(true);
return success();
case Msg::Reset:
m_bFeederEnabled = true;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::FeederEnabled>(m_bFeederEnabled);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_bFeederEnabled = true;
data = Capability::createOneValue<CapType::FeederEnabled>(true);
return success();
@ -933,14 +924,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
{ Bool(), Bool(true) }, Bool(m_scanparam->is_duplex));
return success();
case Msg::Reset:
m_scanparam->is_duplex = true;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::DuplexEnabled>(m_scanparam->is_duplex);
return success();
case Msg::Reset:
case Msg::GetDefault:
data = Capability::createOneValue<CapType::DuplexEnabled>(false);
m_scanparam->is_duplex = true;
data = Capability::createOneValue<CapType::DuplexEnabled>(true);
return success();
case Msg::Set: {
@ -963,15 +953,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createEnumeration<CapType::AutoFeed>(
{ Bool(), Bool(true) }, Bool(m_bAutoFeed));
return success();
case Msg::Reset:
m_bAutoFeed = true;
// fallthrough
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::AutoFeed>(m_bAutoFeed);
return success();
case Msg::Reset:
case Msg::GetDefault:
m_bAutoFeed = true;
data = Capability::createOneValue<CapType::AutoFeed>(true);
return success();
@ -986,6 +974,34 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
}
};
//m_query[CapType::AutoScan] = msgSupportGetAllSetReset;
//m_caps[CapType::AutoScan] = [this](Msg msg, Capability& data) -> Result {
// switch (msg) {
// case Msg::Get:
// data = Capability::createEnumeration<CapType::AutoScan>(
// { Bool(), Bool(true) }, Bool(m_bAutoFeed));
// return success();
// // fallthrough
// case Msg::GetCurrent:
// data = Capability::createOneValue<CapType::AutoScan>(m_bAutoFeed);
// return success();
// case Msg::Reset:
// case Msg::GetDefault:
// m_bAutoFeed = true;
// data = Capability::createOneValue<CapType::AutoScan>(true);
// return success();
// case Msg::Set: {
// auto mech = data.currentItem<CapType::AutoScan>();
// m_bAutoFeed = mech;
// return success();
// }
// default:
// return capBadOperation();
// }
//};
m_query[CapType::IImageFileFormat] = msgSupportGetAllSetReset;
m_caps[CapType::IImageFileFormat] = [this](Msg msg, Capability& data) -> Result {
switch (msg) {
@ -1081,12 +1097,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<CapType::IAutomaticRotate>(
{ Bool(), Bool(true) }, Bool(m_scanparam->is_autotext));
case Msg::Reset:
case Msg::GetCurrent:
m_scanparam->is_autotext = false;
data = Capability::createOneValue<CapType::IAutomaticRotate>(m_scanparam->is_autotext);
return success();
case Msg::Reset:
case Msg::GetDefault:
m_scanparam->is_autotext = false;
data = Capability::createOneValue<CapType::IAutomaticRotate>(false);
return success();
case Msg::Set: {
@ -1162,7 +1178,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
switch (msg) {
case Msg::Get:
data = Capability::createEnumeration<CapType::IAutoSize>(
{ AutoSize::None, AutoSize::Auto,AutoSize::Current }, (UInt16)m_autosize, 0);
{ AutoSize::None, AutoSize::Auto}, (UInt16)m_autosize, 0);
return success();
// fallthrough
case Msg::GetCurrent:
@ -1170,6 +1186,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::Reset:
case Msg::GetDefault:
m_autosize = (UInt16)AutoSize::None;
data = Capability::createOneValue<CapType::IAutoSize>(AutoSize::None);
return success();
@ -1180,6 +1197,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_scanparam->is_autocrop = 1;
m_scanparam->papertype = (byte)Twpp::PaperSize::None;
m_scanparam->paperAlign = PaperAlign::Rot0;
m_autoboarderdetcet = true;
}
else
{
m_autoboarderdetcet = false;
m_scanparam->is_autocrop = 0;
}
m_autosize = (byte)autosize;
return success();
@ -1198,7 +1221,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return success();
case Msg::Reset:
case Msg::GetCurrent:
m_autoscan = true;
m_autoboarderdetcet = false;
data = Capability::createOneValue<CapType::IAutomaticBorderDetection>(m_autoboarderdetcet);
return success();
@ -1213,6 +1236,11 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_scanparam->is_autocrop = true;
m_scanparam->papertype = (byte)Twpp::PaperSize::None;
m_scanparam->paperAlign = PaperAlign::Rot0;
m_autosize = (UInt16)AutoSize::Auto;
}
else
{
m_autosize = (UInt16)AutoSize::None;
}
m_autoboarderdetcet = autodetectborder;
return success();
@ -1345,8 +1373,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IFillBackground), m_scanparam->fillbackground);
return success();
case Msg::Reset:
m_scanparam->fillbackground = false;
case Msg::GetDefault:
m_scanparam->fillbackground = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IFillBackground), Bool(false));
return success();
case Msg::Set: {
@ -1366,12 +1394,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<Bool>((CapType)(CapTypeEx::TwEx_IFillHole), { Bool(),Bool(true) }, Bool(m_scanparam->fillhole.is_fillhole), 0);
return success();
case Msg::Reset:
m_scanparam->fillhole.is_fillhole = false;
case Msg::GetCurrent:
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IFillHole), m_scanparam->fillhole.is_fillhole);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->fillhole.is_fillhole = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IFillHole), Bool(false));
return success();
case Msg::Set: {
@ -1390,12 +1418,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createOneValue<Int32>((CapType)(CapTypeEx::TwEx_IFillHoleRatio), m_scanparam->fillhole.fillholeratio);
return success();
case Msg::Reset:
m_scanparam->fillhole.fillholeratio = 10;
case Msg::GetCurrent:
data = Capability::createOneValue<Int32>((CapType)(CapTypeEx::TwEx_IFillHoleRatio), m_scanparam->fillhole.fillholeratio);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->fillhole.fillholeratio = 10;
data = Capability::createOneValue<Int32>((CapType)(CapTypeEx::TwEx_IFillHoleRatio), Int32(10));
return success();
case Msg::Set: {
@ -1418,12 +1446,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<Bool>((CapType)(CapTypeEx::TwEx_IMultiOutputRed), { Bool(),Bool(true) }, Bool(m_scanparam->multi_output_red), 0);
return success();
case Msg::Reset:
m_scanparam->multi_output_red = false;
case Msg::GetCurrent:
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IMultiOutputRed), m_scanparam->multi_output_red);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->multi_output_red = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_IMultiOutputRed), Bool(false));
return success();
case Msg::Set: {
@ -1452,8 +1480,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_HsvCorrect), m_scanparam->hsvcorrect);
return success();
case Msg::Reset:
m_scanparam->hsvcorrect = false;
case Msg::GetDefault:
m_scanparam->hsvcorrect = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_HsvCorrect), Bool(false));
return success();
case Msg::Set: {
@ -1474,13 +1502,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_scanparam->filter,
0);
return success();
case Msg::Reset:
m_scanparam->filter = (byte)Filter::None;
return success();
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IFilter>((Filter)m_scanparam->filter);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->filter = (byte)Filter::None;
data = Capability::createOneValue<CapType::IFilter>(Filter::None);
return success();
case Msg::Set: {
@ -1510,13 +1537,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_scanparam->enhance_color,
0);
return success();
case Msg::Reset:
m_scanparam->enhance_color = Enchace_Color::Enhance_None;
return success();
case Msg::GetCurrent:
data = Capability::createOneValue<Int16>((CapType)(CapTypeEx::TwEx_IEnhanceColor), (Enchace_Color)(m_scanparam->enhance_color));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->enhance_color = Enchace_Color::Enhance_None;
data = Capability::createOneValue<Int16>((CapType)(CapTypeEx::TwEx_IEnhanceColor), Enchace_Color::Enhance_None);
return success();
case Msg::Set: {
@ -1550,12 +1576,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
m_scanparam->sharpen,
0);
return success();
case Msg::Reset:
m_scanparam->sharpen = SharpenBlur::Sharpen_None;
case Msg::GetCurrent:
data = Capability::createOneValue<Int16>((CapType)(CapTypeEx::TwEx_Sharpen), (SharpenBlur)(m_scanparam->sharpen));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->sharpen = SharpenBlur::Sharpen_None;
data = Capability::createOneValue<Int16>((CapType)(CapTypeEx::TwEx_Sharpen), SharpenBlur::Sharpen_None);
return success();
case Msg::Set: {
@ -1577,12 +1603,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createRange<CapType::IBrightness>(Fix32(-1000.0f), Fix32(1000.0f), Fix32(333.3f), Fix32(m_scanparam->brightness), Fix32(0.0));
return success();
case Msg::Reset:
m_scanparam->brightness = 0.0f;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IBrightness>(Fix32(m_scanparam->brightness));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->brightness = 0.0f;
data = Capability::createOneValue<CapType::IBrightness>(Fix32(0.0f));
return success();
case Msg::Set: {
@ -1603,12 +1629,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createRange<CapType::IContrast>(Fix32(-1000.0f), Fix32(1000.0f), Fix32(333.3f), Fix32(m_scanparam->contrast), Fix32(0.0));
return success();
case Msg::Reset:
m_scanparam->contrast = 0.0f;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IContrast>(Fix32(m_scanparam->contrast));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->contrast = 0.0f;
data = Capability::createOneValue<CapType::IContrast>(Fix32(0.0f));
return success();
case Msg::Set: {
@ -1629,12 +1655,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createRange<CapType::IGamma>(Fix32(0.0f), Fix32(5.0f), Fix32(1.0f), Fix32(m_scanparam->gamma), Fix32(1.0));
return success();
case Msg::Reset:
m_scanparam->gamma = 1.0f;
case Msg::GetCurrent:
data = Capability::createOneValue<CapType::IGamma>(Fix32(m_scanparam->gamma));
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->gamma = 1.0f;
data = Capability::createOneValue<CapType::IGamma>(Fix32(0.0f));
return success();
case Msg::Set: {
@ -1711,12 +1737,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<Bool>((CapType)(CapTypeEx::TwEx_ScrewDetectEnable), { Bool(),Bool(true) }, Bool(m_scanparam->hardwarecaps.en_skrewdetect), 0);
return success();
case Msg::Reset:
m_scanparam->hardwarecaps.en_skrewdetect = false;
case Msg::GetCurrent:
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_ScrewDetectEnable), m_scanparam->hardwarecaps.en_skrewdetect);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->hardwarecaps.en_skrewdetect = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_ScrewDetectEnable), Bool(false));
return success();
case Msg::Set: {
@ -1735,12 +1761,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createOneValue<UInt8>((CapType)(CapTypeEx::TwEx_ScrewLevel), m_scanparam->hardwarecaps.skrewdetectlevel);
return success();
case Msg::Reset:
m_scanparam->hardwarecaps.skrewdetectlevel = 3;
case Msg::GetCurrent:
data = Capability::createOneValue<UInt8>((CapType)(CapTypeEx::TwEx_ScrewLevel), m_scanparam->hardwarecaps.skrewdetectlevel);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->hardwarecaps.skrewdetectlevel = 3;
data = Capability::createOneValue<UInt8>((CapType)(CapTypeEx::TwEx_ScrewLevel), UInt8(3));
return success();
case Msg::Set: {
@ -1763,12 +1789,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<Bool>((CapType)(CapTypeEx::TwEx_StableDetectEnable), { Bool(),Bool(true) }, Bool(m_scanparam->hardwarecaps.en_stapledetect), 0);
return success();
case Msg::Reset:
m_scanparam->hardwarecaps.en_stapledetect = false;
case Msg::GetCurrent:
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_StableDetectEnable), m_scanparam->hardwarecaps.en_stapledetect);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->hardwarecaps.en_stapledetect = false;
data = Capability::createOneValue<Bool>((CapType)(CapTypeEx::TwEx_StableDetectEnable), Bool(false));
return success();
case Msg::Set: {
@ -1788,12 +1814,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
case Msg::Get:
data = Capability::createEnumeration<Bool>(CapType::DoubleFeedDetection, { Bool(),Bool(true) }, Bool(m_scanparam->hardwarecaps.en_doublefeed), 0);
return success();
case Msg::Reset:
m_scanparam->hardwarecaps.en_doublefeed = false;
case Msg::GetCurrent:
data = Capability::createOneValue<Bool>(CapType::DoubleFeedDetection, m_scanparam->hardwarecaps.en_doublefeed);
return success();
case Msg::GetDefault:
case Msg::Reset:
m_scanparam->hardwarecaps.en_doublefeed = false;
data = Capability::createOneValue<Bool>(CapType::DoubleFeedDetection, Bool(false));
return success();
case Msg::Set: {
@ -1827,7 +1853,7 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
ReleaseMutex(hMutex);
CloseHandle(hMutex);
}
saveGscanCapSetting();
//saveGscanCapSetting();
return success();
}
@ -1900,6 +1926,7 @@ Result HuagaoDs::userInterfaceDisable(const Identity&, UserInterface& ui) {
Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
m_pendingXfers = 1;
m_memXferYOff = 0;
scanner->ResetMsgFiter();
//writelog("userInterfaceEnable");
if (!ui.showUi()) {
// this is an exception when we want to set state explicitly, notifyXferReady can be called only in enabled state
@ -2004,7 +2031,7 @@ Result HuagaoDs::imageMemXferGet(const Identity& origin, ImageMemXfer& data) {
if (rows == 0) {
return seqError(); // image already transfered in this session
}
cv::Mat mat = cv::imdecode(bmpData, cv::IMREAD_GRAYSCALE);
//cv::Mat mat = cv::imdecode(bmpData, cv::IMREAD_GRAYSCALE);
//G4Tiff gt(mat);
//vector<uchar> cmpdata;
//gt.GetCompressedData(cmpdata);
@ -2185,6 +2212,7 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
auto scanFunction = [this](const GScanCap& caps) {
m_pendingXfers = 1;
m_scanparam.reset(new GScanCap(caps));
saveGscanCapSetting();
if (startScan() == success()) {
notifyXferReady();
//FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "notifyXferReady");
@ -2197,6 +2225,7 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
//!< ui only to confirm button push
auto confirmFunction = [this](const GScanCap& caps) {
m_scanparam.reset(new GScanCap(caps));
saveGscanCapSetting();
notifyCloseOk();
};
@ -2244,6 +2273,12 @@ void HuagaoDs::updataGscanCap()
GScanCap cfs = js.ReadGscanCap();
cfs.resolution_native = 200.0f;
cfs.threshold = 128;
if (cfs.is_autocrop)
{
m_autoboarderdetcet = true;
m_autosize = (UInt16)AutoSize::Auto;
}
m_scanparam.reset(new GScanCap(cfs));
}

View File

@ -73,14 +73,14 @@ SOURCES += huagaods.cpp \
ImageProcess/ImageApplyChannel.cpp \
ImageProcess/ImageApplyCrop.cpp \
ImageProcess/ImageApplyDiscardBlank.cpp \
ImageProcess/ImageApplyDetachNoise.cpp \
ImageProcess/ImageApplyHSVCorrect.cpp \
ImageProcess/ImageApplyOutHole.cpp \
ImageProcess/ImageApplyResize.cpp \
ImageProcess/ImageApplyRotation.cpp \
ImageProcess/ImageApplySharpen.cpp \
ImageProcess/ImageProcess_Public.cpp \
ImageProcess/ImageApplyConcatenation.cpp \
ImageProcess/ImageApplyDetachNoise.cpp \
ImageProcess/ImageApplyHSVCorrect.cpp \
GscanJsonConfig.cpp \
Sliders.cpp \
SmartEdit.cpp \
@ -129,15 +129,15 @@ HEADERS += huagaods.hpp \
ImageProcess/ImageApplyChannel.h \
ImageProcess/ImageApplyCrop.h \
ImageProcess/ImageApplyDiscardBlank.h \
ImageProcess/ImageApplyHeaders.h \
ImageProcess/ImageApplyDetachNoise.h \
ImageProcess/ImageApplyHSVCorrect.h \
ImageProcess/ImageApplyHeaders.h \
ImageProcess/ImageApplyOutHole.h \
ImageProcess/ImageApplyResize.h \
ImageProcess/ImageApplyRotation.h \
ImageProcess/ImageApplySharpen.h \
ImageProcess/ImageProcess_Public.h \
ImageProcess/ImageApplyConcatenation.h \
ImageProcess/ImageApplyHSVCorrect.h \
GscanJsonConfig.h \
MapFinder.h \
Sliders.h \