From f9b494c5b61d55bd9584640ae223591fd4215558 Mon Sep 17 00:00:00 2001 From: lovelyyoung <1002639516@qq.com> Date: Sat, 15 Aug 2020 16:42:43 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6=E4=BC=A0?= =?UTF-8?q?=E8=BE=93=E5=BC=82=E5=B8=B8=202.=E5=8E=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- huagao/huagaods.cpp | 71 +++++++++++++++++++++------------------------ huagao/huagaods.hpp | 1 - 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/huagao/huagaods.cpp b/huagao/huagaods.cpp index de97df70..c2d643b5 100644 --- a/huagao/huagaods.cpp +++ b/huagao/huagaods.cpp @@ -124,7 +124,7 @@ static constexpr const Identity srcIdent( // lets just simulate uniform resolution for both axes static constexpr UInt32 RESOLUTIONX = 85; -static std::unique_ptr application(new CWinApp()); +//static std::unique_ptr application(new CWinApp()); static list resList = { 100.0,150.0,200.0,240.0,300.0 }; @@ -408,15 +408,7 @@ Result HuagaoDs::eventProcess(const Identity&, Event& event) { return { ReturnCode::NotDsEvent, ConditionCode::Success }; } -//Result HuagaoDs::customDataSet(const Twpp::Identity& origin, Twpp::CustomData& data) -//{ -// return Result(); -//} -//Twpp::Result HuagaoDs::deviceEventGet(const Twpp::Identity & origin, Twpp::DeviceEvent & data) -//{ -// data = DeviceEvent::simple(DeviceEvent::Type::PaperJam, Str255("HuaGo G200 Twain Device Error")); -// return success(); -//} + //add------------------设置jpg图像dpi--------------------------- void HuagaoDs::SetResoluton(const char* path, int resolution) { @@ -453,7 +445,6 @@ 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()) { ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE); @@ -505,15 +496,14 @@ Result HuagaoDs::identityOpenDs(const Identity&) { if (item > 65535 || item < -1) { return badValue(); } - m_capXferCount = item; - m_scanparam->scannum = m_capXferCount; + m_scanparam->scannum = item; return success(); } - auto ret = oneValGetSet(msg, data, m_capXferCount, -1); - if (Twpp::success(ret) && m_capXferCount == 0) { - m_capXferCount = -1; - m_scanparam->scannum = m_capXferCount; + Int16 tmp_count = m_scanparam->scannum; + auto ret = oneValGetSet(msg, data, tmp_count, -1); + if (!Twpp::success(ret) && m_scanparam->scannum == 0) { + m_scanparam->scannum = -1; return { ReturnCode::CheckStatus, ConditionCode::BadValue }; } return ret; @@ -595,10 +585,10 @@ Result HuagaoDs::identityOpenDs(const Identity&) { m_caps[CapType::IPlanarChunky] = std::bind(enmGetSetConst, _1, _2, PlanarChunky::Chunky); m_query[CapType::IPhysicalWidth] = msgSupportGetAll; - m_caps[CapType::IPhysicalWidth] = std::bind(oneValGet, _1, _2, Fix32(static_cast(header()->biWidth) / RESOLUTIONX)); + m_caps[CapType::IPhysicalWidth] = std::bind(oneValGet, _1, _2, Fix32(static_cast(header()->biWidth) / m_scanparam->resolution_dst)); m_query[CapType::IPhysicalHeight] = msgSupportGetAll; - m_caps[CapType::IPhysicalHeight] = std::bind(oneValGet, _1, _2, Fix32(static_cast(header()->biHeight) / RESOLUTIONX)); + m_caps[CapType::IPhysicalHeight] = std::bind(oneValGet, _1, _2, Fix32(static_cast(header()->biHeight) / m_scanparam->resolution_dst)); m_query[CapType::IPixelFlavor] = msgSupportGetAllSetReset; m_caps[CapType::IPixelFlavor] = std::bind(enmGetSetConst, _1, _2, PixelFlavor::Chocolate); @@ -999,6 +989,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { m_caps[CapType::DuplexEnabled] = [this](Msg msg, Capability& data) -> Result { switch (msg) { case Msg::Get: + //MessageBox(NULL, m_scanparam->is_duplex?TEXT("Get duplex"): TEXT("Get not duplex"), TEXT("aa"), MB_OK); data = Capability::createEnumeration( { Bool(), Bool(true) }, Bool(m_scanparam->is_duplex)); return success(); @@ -1015,6 +1006,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { case Msg::Set: { auto mech = data.currentItem(); m_scanparam->is_duplex = mech; + m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = m_scanparam->en_fold = 0; if (!mech) m_scanparam->is_backrotate180 = 0;//单面背面旋转180°不可用 return success(); @@ -1352,6 +1344,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { { m_scanparam->is_duplex = 1; m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏 + m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0; } return success(); } @@ -1380,6 +1373,9 @@ Result HuagaoDs::identityOpenDs(const Identity&) { case Msg::Set: { auto mech = data.currentItem(); m_scanparam->is_autodiscradblank_normal = (Int32)mech == (Int32)DiscardBlankPages::Auto; + m_scanparam->is_duplex = 1; + m_scanparam->en_fold = 0; + m_scanparam->is_autodiscradblank_vince = 0; return success(); } default: @@ -1406,6 +1402,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) { case Msg::Set: { auto mech = data.currentItem(); m_scanparam->is_autodiscradblank_vince = mech; + m_scanparam->is_duplex = 1; + m_scanparam->en_fold = 0; if (mech) m_scanparam->is_autodiscradblank_normal = 0; return success(); @@ -1916,7 +1914,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) { Result HuagaoDs::identityCloseDs(const Identity&) { // no need to explicitly release any resources if using RAII // TWPP will free the whole source on its own after this method - //FileTools::write_log("D:\\1.txt", "identityCloseDs enter"); if (guiIndicator.get()) guiIndicator.reset(); @@ -1926,10 +1923,8 @@ Result HuagaoDs::identityCloseDs(const Identity&) { if (guiBridge.get()) guiBridge.reset(); - //FileTools::write_log("D:\\1.txt", "identityCloseDs enter1"); scanner.reset(); - //FileTools::write_log("D:\\1.txt", "identityCloseDs enter2"); if (hMutex) { @@ -1937,7 +1932,6 @@ Result HuagaoDs::identityCloseDs(const Identity&) { CloseHandle(hMutex); } //saveGscanCapSetting(); - //FileTools::write_log("D:\\1.txt", "identityCloseDs exit"); return success(); } @@ -1948,19 +1942,16 @@ Result HuagaoDs::pendingXfersGet(const Identity&, PendingXfers& data) { Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) { //!< end xfer if set count 0 - //FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd"); if (bmpData.size() > 0) bmpData.clear(); int ret = scanner->aquire_bmpdata(bmpData); - //FileTools::write_log("D:\\1.txt", "enter pendingXfersEnd1"); if (ret != 0) { scanner->Set_ErrorCode(0); - guiIndicator->ShowWindow(SW_HIDE); + if(guiIndicator.get()) + guiIndicator->ShowWindow(SW_HIDE); //guiIndicator.reset(); if (ret != -1) { - //ShellExecute(NULL, _T("open"), _T("aa.exe"), CString("1"), _T(""), SW_HIDE); - //MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[ret], _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION);// CString str; str.Format(_T("%d"), ret); ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE); @@ -1981,7 +1972,6 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) { #endif // LOG_NORMAL data.setCount(m_pendingXfers); - //FileTools::write_log("D:\\1.txt", "exit pendingXfersEnd"+ m_pendingXfers==0?" 0":"1"); return success(); } @@ -2025,7 +2015,6 @@ 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 // with hidden UI, the usual workflow DsState::Enabled -> notifyXferReady() -> DsState::XferReady is a single step @@ -2086,7 +2075,7 @@ Result HuagaoDs::imageLayoutGet(const Identity&, ImageLayout& data) { data.setDocumentNumber(1); data.setFrameNumber(1); data.setPageNumber(1); - data.setFrame(Frame(0, 0, static_cast(dib->biWidth) / RESOLUTIONX, static_cast(dib->biHeight) / RESOLUTIONX)); + data.setFrame(Frame(0, 0, static_cast(dib->biWidth) / m_scanparam->resolution_dst, static_cast(dib->biHeight) / m_scanparam->resolution_dst)); return success(); } @@ -2262,12 +2251,11 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin) if (bmpData.size() > 0) { fwrite(bmpData.data(), 1, bmpData.size(), pfile); fclose(pfile); - return success(); + return Result(ReturnCode::XferDone, ConditionCode::Success); } } return Result(ReturnCode::Failure, ConditionCode::BadValue); } - break; case ImageFileFormat::Tiff: case ImageFileFormat::Jfif: { @@ -2285,9 +2273,8 @@ Twpp::Result HuagaoDs::imageFileXferGet(const Twpp::Identity& origin) compression_params.push_back(m_jpegQuality); cv::imwrite(filename, ims, compression_params); - return success(); + return Result(ReturnCode::XferDone, ConditionCode::Success); } - break; default: break; } @@ -2319,7 +2306,6 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) saveGscanCapSetting(); if (startScan() == success()) { notifyXferReady(); - //FileTools::write_log("E:\\Users\\huago\\Desktop\\1.txt", "notifyXferReady"); } else { m_pendingXfers = 0; @@ -2346,6 +2332,9 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) std::string hardwareversion = scanner->GetFWVersion(); guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum)); guiTwain->Create(IDD_TWAINUI, parent); + CRect newRect; + ::GetWindowRect(static_cast(ui.parent().raw()), &newRect); + SetWindowPos(guiTwain->m_hWnd, HWND_TOP, newRect.left + 20, newRect.top + 100, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE); guiTwain->ShowWindow(SW_SHOWNORMAL); return success(); } @@ -2377,6 +2366,7 @@ void HuagaoDs::updataGscanCap() GScanCap cfs = js.ReadGscanCap(); cfs.resolution_native = 200.0f; cfs.threshold = 128; + //FileTools::write_log("D:\\2.txt", "is_autodiscradblank_normal = " + to_string(cfs.is_autodiscradblank_normal) + "is_autodiscradblank_vince =" + to_string(cfs.is_autodiscradblank_vince)); if (cfs.is_autocrop) { m_autoboarderdetcet = true; @@ -2398,6 +2388,8 @@ Twpp::Result HuagaoDs::startScan() #endif // scanner->config_params(*m_scanparam); + //FileTools::write_log("D:\\2.txt", "is_autodiscradblank_normal = " + to_string(m_scanparam->is_autodiscradblank_normal) + " 222is_autodiscradblank_vince =" + to_string(m_scanparam->is_autodiscradblank_vince)); + if (m_bIndicator) { //!< cancel button push auto stopFunc = [this]() { @@ -2422,7 +2414,8 @@ Twpp::Result HuagaoDs::startScan() int retCode = scanner->aquire_bmpdata(bmpData); if (retCode != 0) { scanner->Set_ErrorCode(0); - guiIndicator.reset(); + if(guiIndicator.get()) + guiIndicator.reset(); if (retCode != -1) { //MessageBox(guiTwain ? guiTwain->m_hWnd : NULL, noticeMsgMap[retCode], _T("提示"), MB_SYSTEMMODAL | MB_OK | MB_ICONINFORMATION); CString str; @@ -2444,7 +2437,9 @@ Twpp::Result HuagaoDs::startScan() return success(); } else { - guiIndicator.reset(); + if(guiIndicator.get()) + guiIndicator.reset(); + if (guiTwain.get()) { ((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true); } diff --git a/huagao/huagaods.hpp b/huagao/huagaods.hpp index c5475528..cf98b0bf 100644 --- a/huagao/huagaods.hpp +++ b/huagao/huagaods.hpp @@ -98,7 +98,6 @@ private: Twpp::UInt16 m_autosize = 0; Twpp::Bool m_autoscan = true; Twpp::Bool m_autoboarderdetcet = false; - Twpp::Int16 m_capXferCount = -1; Twpp::Fix32 m_brightness = 0.0f; Twpp::XferMech m_capXferMech = Twpp::XferMech::Native; Twpp::PixelType m_capPixelType = Twpp::PixelType::Rgb;