diff --git a/changelog.txt b/changelog.txt index 69ee9996..55bd5605 100644 --- a/changelog.txt +++ b/changelog.txt @@ -80,4 +80,5 @@ 1.修复单面扫描 拆分 多流除红 出图不一致问题 -- 22.11.28 2.修复跳过空白页首选项配置保存问题 -- 22.11.28 3.调整msvc与mfc链接顺序,默认开启多核编译 - 4.添加色偏算法 \ No newline at end of file + 4.添加色偏算法 + 5.UI开放色偏校正,增加色偏校正协议 --23.01.05 \ No newline at end of file diff --git a/huagao/CBasicPage.cpp b/huagao/CBasicPage.cpp index 11d3c45a..5ad86d81 100644 --- a/huagao/CBasicPage.cpp +++ b/huagao/CBasicPage.cpp @@ -228,6 +228,13 @@ void CBasicPage::OnCbnSelchangeCmbcolortype() { // TODO: 在此添加控件通知处理程序代码 updateCmbDuplex(TRUE); + if (m_cmBoxColorMode->GetCurSel() != 0) + { + ((CButton*)GetDlgItem(IDC_CKCOLORCAST))->SetCheck(FALSE); + GetDlgItem(IDC_CKCOLORCAST)->EnableWindow(FALSE); + } + else + GetDlgItem(IDC_CKCOLORCAST)->EnableWindow(TRUE); m_dataChange(); } diff --git a/huagao/CBasicPage.h b/huagao/CBasicPage.h index 432e81b8..8052d1f8 100644 --- a/huagao/CBasicPage.h +++ b/huagao/CBasicPage.h @@ -5,6 +5,7 @@ #include "twglue.hpp" #include + // CBasicPage 对话框 class CBasicPage : public CTabPageSSL diff --git a/huagao/CTwainUI.cpp b/huagao/CTwainUI.cpp index 8eab39bf..65ae9205 100644 --- a/huagao/CTwainUI.cpp +++ b/huagao/CTwainUI.cpp @@ -99,6 +99,13 @@ BOOL CTwainUI::OnInitDialog() setvisable_size(true); if ((m_hardwareVersion[5] == 'B' && atoi(m_hardwareVersion.substr(6, 4).c_str()) >= 430) || (m_hardwareVersion[5] > 'B')) m_pageBasic->m_Edit_Dpi.SetParams(100, 600, 10); + if ((m_hardwareVersion[5] == 'C' && atoi(m_hardwareVersion.substr(6, 4).c_str()) >= 103) || (m_hardwareVersion[5] > 'C')) + m_pageBasic->GetDlgItem(IDC_CKCOLORCAST)->ShowWindow(SW_SHOW); + else + { + ((CButton*)m_pageBasic->GetDlgItem(IDC_CKCOLORCAST))->SetCheck(FALSE); + m_pageBasic->GetDlgItem(IDC_CKCOLORCAST)->ShowWindow(SW_HIDE); + } } else { setvisable_dogear(false); @@ -248,6 +255,7 @@ void CTwainUI::UpdateUI() ((CButton*)m_pageBasic->GetDlgItem(IDC_RDSPEEDPRIORITY))->SetCheck(!settings->is_high_imagequality); ((CButton*)m_pageBasic->GetDlgItem(IDC_CKSPLIT))->SetCheck(settings->is_split); ((CButton*)m_pageBasic->GetDlgItem(IDC_CKFIXEDPAPER))->SetCheck(settings->en_fixedpaper); + ((CButton*)m_pageBasic->GetDlgItem(IDC_CKCOLORCAST))->SetCheck(settings->pixtype == 2?settings->is_colorcast : FALSE); #ifdef UV m_pageBasic->m_bUV = settings->hardwarecaps.en_uv == 1 ? TRUE : FALSE; #endif @@ -612,6 +620,7 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs) settings->resolution_dst = configItem->Resolution; settings->resolution_native = 200.0f; settings->is_split = ((CButton*)m_pageBasic->GetDlgItem(IDC_CKSPLIT))->GetCheck(); + settings->is_colorcast = ((CButton*)m_pageBasic->GetDlgItem(IDC_CKCOLORCAST))->GetCheck(); settings->is_switchfrontback = configItem->EnSwitchFrontBack ? 1 : 0; //float value_Contrast = GetContrast(configItem->Contrast); settings->contrast = configItem->Contrast; diff --git a/huagao/Device/GScanO1003399.cpp b/huagao/Device/GScanO1003399.cpp index 6759f8c8..a54ef948 100644 --- a/huagao/Device/GScanO1003399.cpp +++ b/huagao/Device/GScanO1003399.cpp @@ -367,6 +367,7 @@ void GScanO1003399::config_params(GScanCap& param) param39.fillholeratio_down = param.fillholeratio_down; param39.fillholeratio_left = param.fillholeratio_left; param39.fillholeratio_right = param.fillholeratio_right; + param39.is_colorcast = param.is_colorcast; param39.fillhole.fillholeratio = std::max(std::max(std::max(param.fillholeratio_down, param.fillholeratio_up), std::max(param.fillholeratio_left, param.fillholeratio_right)),1); m_usb->write_bulk(¶m39, sizeof(param39)); m_param .resolution_native = param.resolution_dst >= 500.0f ? 300.0f : 200.0f; @@ -618,7 +619,7 @@ void GScanO1003399::usb_run() void GScanO1003399::start() { - if ((fwversion[5] == 'B' && atoi(fwversion.substr(6, 4).c_str()) >= 1030) || (fwversion[5] > 'B')) { + if ((fwversion[5] == 'B' && atoi(fwversion.substr(6, 4).c_str()) >= 500) || (fwversion[5] > 'B')) { if (scanner_read_reg(m_usb, SR_GET_LOCK_STATES)) { std::string keys; if (m_token.length() != 32) diff --git a/huagao/Device/GScanO400Android.cpp b/huagao/Device/GScanO400Android.cpp index d3376255..980f4030 100644 --- a/huagao/Device/GScanO400Android.cpp +++ b/huagao/Device/GScanO400Android.cpp @@ -257,6 +257,7 @@ std::string GScanO400Android::GetMacAdder() { std::string GScanO400Android::GetFWVersion() { + //return "1234567890"; if (m_usb.get() && m_usb->is_connected()) { //lock_guard< mutex> lock(m_imgLocker); if (fwVersion.empty()) { @@ -268,10 +269,6 @@ std::string GScanO400Android::GetFWVersion() m_usb->read_bulk(&fwVersion[0], fwVersion.size()); std::this_thread::sleep_for(chrono::milliseconds(10)); } - //if (fwVersion.substr(0, 2) == "G3" || fwVersion.substr(0, 2) == "G4" ||fwVersion.substr(0,2)== "GU") - // is_Android = false; - //else - // is_Android = true; return fwVersion; } return ""; diff --git a/huagao/Device/ImageMatQueue.cpp b/huagao/Device/ImageMatQueue.cpp index c7fba7c8..619eb34f 100644 --- a/huagao/Device/ImageMatQueue.cpp +++ b/huagao/Device/ImageMatQueue.cpp @@ -203,7 +203,7 @@ void ImageMatQueue::setparam(const GScanCap& param) // m_iaList.push_back(shared_ptr(new CImageApplyHSVCorrect(CImageApplyHSVCorrect::CorrectOption::LowSaturation_Removal, true))); //} - if (param.pixtype == 2) + if ((param.pixtype == 2) && (param.is_colorcast)) { m_iaList.push_back(m_colorcast); } diff --git a/huagao/Device/PublicFunc.h b/huagao/Device/PublicFunc.h index f104d67c..09b06b1c 100644 --- a/huagao/Device/PublicFunc.h +++ b/huagao/Device/PublicFunc.h @@ -47,6 +47,7 @@ const std::string AUTOCROP = "bAuotCrop"; const std::string HIGH_IMAGE_QUALITY = "bHighimagequality"; const std::string SWITCHFRONTBACK = "bSwitchFrontBack"; const std::string SPLIT = "bSplit"; +const std::string COLORCAST = "bColorCast"; //*/ int HsvFilterType; /**< ⿨ɫ ݶ0 Ϊرգ1Ϊɫ>*/ - uint32_t reserve[1024]; /**< Ԥ4096ֽЭչ*/ + bool is_colorcast; /**< ɫƫУ>*/ + uint32_t reserve[1024]; /**< Ԥ4096ֽЭչ>*/ }; typedef struct Paper_Status { diff --git a/huagao/GscanJsonConfig.cpp b/huagao/GscanJsonConfig.cpp index 2397f2f3..294b29da 100644 --- a/huagao/GscanJsonConfig.cpp +++ b/huagao/GscanJsonConfig.cpp @@ -108,6 +108,7 @@ 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(SPLIT, gcap.is_split, false); + outJson["Config"].Add(COLORCAST, gcap.is_colorcast, false); #ifdef UV outJson["Config"].Add(ENUVMODEL, (bool)(gcap.hardwarecaps.en_uv), false); @@ -261,6 +262,8 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector cfgArray, const root["Config"][FLOD].Add(i, (bool)cfgArray[i].en_fold); root["Config"][SWITCHFRONTBACK].Add(i,(bool)cfgArray[i].is_switchfrontback); root["Config"][SPLIT].Add(i, cfgArray[i].is_split); + root["Config"][COLORCAST].Add(i, cfgArray[i].is_colorcast); + #ifdef UV root["Config"][ENUVMODEL].Add(i, cfgArray[i].hardwarecaps.en_uv); #endif @@ -448,6 +451,9 @@ std::vector GscanJsonConfig::parseJsonFromString(const std::string str neb::CJsonObject itmEnSplit; root["Config"].Get(SPLIT, itmEnSplit); + neb::CJsonObject itmEnColorCast; + root["Config"].Get(COLORCAST, itmEnColorCast); + neb::CJsonObject itmdiscarbrank_value; root["Config"].Get(DISCARBLANK_VALUE, itmdiscarbrank_value); #ifdef UV @@ -603,6 +609,9 @@ std::vector GscanJsonConfig::parseJsonFromString(const std::string str cfp.en_fold = b_value ? 1 : 0; itmEnSwitchFrontBack.Get(i, b_value); cfp.is_switchfrontback = b_value ? 1 : 0; + itmEnColorCast.Get(i, b_value); + cfp.is_colorcast = b_value ? 1 : 0; + itmEnSplit.Get(i, b_value); cfp.is_split = b_value ? 1 : 0; #ifdef UV @@ -757,6 +766,9 @@ std::vector GscanJsonConfig::parseJsonFromString(const std::string str cfp.is_switchfrontback = bvalue?1:0; root["Config"].Get(SPLIT, bvalue); cfp.is_split = bvalue ? 1 : 0; + + root["Config"].Get(COLORCAST, bvalue); + cfp.is_colorcast = bvalue ? 1 : 0; #ifdef UV root["Config"].Get(ENUVMODEL, bvalue); cfp.hardwarecaps.en_uv = bvalue ? 1 : 0; @@ -908,6 +920,7 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap) js[CONFIG][FLOD] = cap.en_fold; js[CONFIG][SWITCHFRONTBACK] = cap.is_switchfrontback; js[CONFIG][SPLIT] = cap.is_split; + js[CONFIG][COLORCAST] = cap.is_colorcast; #ifdef UV js[CONFIG][ENUVMODEL] = cap.hardwarecaps.en_uv; #endif @@ -985,6 +998,7 @@ GScanCap GscanJsonConfig::JsonToGscancap(json& js) cap.en_fold = json_cast(js[CONFIG][FLOD]).to_int(); cap.is_switchfrontback = json_cast(js[CONFIG][SWITCHFRONTBACK]).to_int(); cap.is_split = json_cast(js[CONFIG][SPLIT]).to_int(); + cap.is_colorcast = json_cast(js[CONFIG][COLORCAST]).to_int(); #ifdef UV cap.hardwarecaps.en_uv = json_cast(js[CONFIG][ENUVMODEL]).to_int(); #endif // UV @@ -1062,6 +1076,7 @@ json GscanJsonConfig::GetDefaultJson() "bFlod": false , "bSwitchFrontBack": false , "bSplit": false , + "bColorCast": false , "bUVmodel": false, "detachnoise": false , "detachnoisevalue": 10 , @@ -1133,6 +1148,7 @@ json GscanJsonConfig::GetDefaultJson() "bFlod": false , "bSwitchFrontBack": false , "bSplit": false , + "bColorCast": false , "detachnoise": false , "detachnoisevalue": 10 , "bfadeback": false , diff --git a/huagao/ImageProcess/ImageApplyColorCastCorrect.cpp b/huagao/ImageProcess/ImageApplyColorCastCorrect.cpp index 9b05ccd6..39b8c138 100644 --- a/huagao/ImageProcess/ImageApplyColorCastCorrect.cpp +++ b/huagao/ImageProcess/ImageApplyColorCastCorrect.cpp @@ -11,7 +11,7 @@ CImageApplyColorCastCorrect::CImageApplyColorCastCorrect() { std::vector points_x, points_y; points_x = { 0, 80, 175, 255 }; - points_y = { 12, 85, 175, 270 }; + points_y = { 5, 85, 170, 245 }; createTable(points_x, points_y); } diff --git a/huagao/huagaods.cpp b/huagao/huagaods.cpp index 8cdfa3fd..117866f9 100644 --- a/huagao/huagaods.cpp +++ b/huagao/huagaods.cpp @@ -73,7 +73,8 @@ enum class CapTypeEx : unsigned short { TwEx_IFixedPaper = 0x8114, TwEx_IHighImageQuality = 0x8115, TwEx_SETTOKEN = 0x8116, - TwEx_IHsvFilter = 0x8117 + TwEx_IHsvFilter = 0x8117, + TwEx_ColorCast = 0x8118, }; enum class PaperSizeEx : unsigned short { @@ -2302,7 +2303,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { //ͼ m_query[(CapType)(CapTypeEx::TwEx_ImageSplit)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_ImageSplit)] = [this](Msg msg, Capability& data)->Result { - CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CropModel), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); + CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_ImageSplit), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); if (Msg::Set == msg) { auto mech = data.currentItem(); m_scanparam->is_split = mech; @@ -2310,10 +2311,24 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->is_split, false); }; + + //ɫƫУ + m_query[(CapType)(CapTypeEx::TwEx_ColorCast)] = msgSupportGetAllSetReset; + m_caps[(CapType)(CapTypeEx::TwEx_ColorCast)] = [this](Msg msg, Capability& data)->Result { + CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_ColorCast), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); + if (Msg::Set == msg) { + if (m_scanparam->pixtype != 2) + return badValue(); + auto mech = data.currentItem(); + m_scanparam->is_colorcast = mech; + return success(); + } + return CapSupGetAllResetEx(msg, data, m_scanparam->is_colorcast, false); + }; m_query[(CapType)(CapTypeEx::TwEx_IHsvFilter)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IHsvFilter)] = [this](Msg msg, Capability& data)->Result { - //CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CropModel), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); + CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IHsvFilter), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); if (Msg::Set == msg) { auto mech = data.currentItem(); if (m_scanparam->pixtype != 2)//color diff --git a/huagao/huagaotwds.rc b/huagao/huagaotwds.rc index c405a3f0..c032819a 100644 Binary files a/huagao/huagaotwds.rc and b/huagao/huagaotwds.rc differ diff --git a/huagao/resource.h b/huagao/resource.h index f19d7c12..100d7e26 100644 Binary files a/huagao/resource.h and b/huagao/resource.h differ diff --git a/huagao/stdafx.h b/huagao/stdafx.h index 249efc1a..e8fe4b20 100644 Binary files a/huagao/stdafx.h and b/huagao/stdafx.h differ