diff --git a/huagao/CAboutDlg.cpp b/huagao/CAboutDlg.cpp index e202e55..4d77cbe 100644 --- a/huagao/CAboutDlg.cpp +++ b/huagao/CAboutDlg.cpp @@ -50,9 +50,15 @@ BOOL CAboutDlg::OnInitDialog() SetDlgItemText(IDC_LBDERIVERVERSON, HG_VERSION_INFO); SetDlgItemText(IDC_LBCOMPANY, LIMIT_INFO); -#ifndef MAKEHUAGAO - GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(FALSE); + CStatic* pStatic = (CStatic*)GetDlgItem(IDC_PICABOUTHUAGO); +#ifdef MAKEHUAGAO + //GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(true); + HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMPABOUTDLG)); +#else defined MAKERTW + HBITMAP hBitmap = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMPRHW)); #endif + pStatic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE); + pStatic->SetBitmap(hBitmap); SetDlgItemText(IDC_LBDESIGNERVALUE, COMPANY_NAME); SetDlgItemText(IDC_LBCOMPANYADDRESS, COMPANY_ADDRESS); return TRUE; // return TRUE unless you set the focus to a control diff --git a/huagao/CBasicPage.cpp b/huagao/CBasicPage.cpp index 46fcff6..1ecb23a 100644 --- a/huagao/CBasicPage.cpp +++ b/huagao/CBasicPage.cpp @@ -191,6 +191,15 @@ void CBasicPage::updateCmbDuplex(BOOL insert) int tmp_duplexindex = m_cmBoxDuplex->GetCurSel(); int tmp_resindex = m_cmBoxResultion->GetCurSel(); int totalcount = m_cmBoxDuplex->GetCount(); + if (tmp_colorindex == 2) + { + ((CButton*)(this->GetDlgItem(IDC_CKBENABLEUV)))->SetCheck(false); + ((CButton*)(this->GetDlgItem(IDC_CKBENABLEUV)))->EnableWindow(false); + } + else + { + ((CButton*)(this->GetDlgItem(IDC_CKBENABLEUV)))->EnableWindow(true); + } if (tmp_colorindex == 0 && tmp_paperindex >= 18 && tmp_resindex == 4) { m_cmBoxDuplex->DeleteString(4); m_cmBoxDuplex->SetCurSel(1); diff --git a/huagao/CMakeLists.txt b/huagao/CMakeLists.txt index c0ba53a..b04f664 100644 --- a/huagao/CMakeLists.txt +++ b/huagao/CMakeLists.txt @@ -105,4 +105,4 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/redistribute) set(huagaotwain_path "$<$:${LIBRARY_OUTPUT_PATH}\\Debug\\huagaotwain.dll>" "$<$:${LIBRARY_OUTPUT_PATH}\\Release\\huagaotwain.dll>") string(REPLACE "/" "\\" huagaotwain_path ${huagaotwain_path}) -add_custom_command(TARGET huagaotwain POST_BUILD COMMAND copy ${huagaotwain_path} $ENV{windir}\\twain_32\\huagoscan\\huagaotwain.ds) \ No newline at end of file +#add_custom_command(TARGET huagaotwain POST_BUILD COMMAND copy ${huagaotwain_path} $ENV{windir}\\twain_32\\huagoscan\\huagaotwain.ds) \ No newline at end of file diff --git a/huagao/Device/G400ScanConfig.cpp b/huagao/Device/G400ScanConfig.cpp index e21033f..47d6bf0 100644 --- a/huagao/Device/G400ScanConfig.cpp +++ b/huagao/Device/G400ScanConfig.cpp @@ -1,3 +1,4 @@ +#pragma once #include "G400ScanConfig.h" G400ScanConfig::G400ScanConfig(GScanCap& gcap) diff --git a/huagao/Device/ImageMatQueue.cpp b/huagao/Device/ImageMatQueue.cpp index 656dd05..edb82aa 100644 --- a/huagao/Device/ImageMatQueue.cpp +++ b/huagao/Device/ImageMatQueue.cpp @@ -164,10 +164,10 @@ void ImageMatQueue::setparam(const GScanCap& param) m_iaList.push_back(shared_ptr< CImageApply>(apply)); } - if (scanParam.en_fold) - { - m_iaList.push_back(shared_ptr(new CImageApplyConcatenation(CImageApplyConcatenation::horizontal))); - } + //if (scanParam.en_fold) + //{ + // m_iaList.push_back(shared_ptr(new CImageApplyConcatenation(CImageApplyConcatenation::horizontal))); + //} if (param.imageRotateDegree != 0.0 || param.is_backrotate180 || param.is_autotext) { @@ -186,7 +186,13 @@ void ImageMatQueue::setparam(const GScanCap& param) TCHAR szIniFile[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE); +#ifdef MAKEHUAGAO _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata")); +#else defined MAKERTW + _tcscat(szIniFile, _T("\\twain_32\\RighTWayScan\\tessdata")); +#endif // MAKEHUGO + + 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); @@ -239,6 +245,8 @@ void ImageMatQueue::proc() for (auto& buf : buffs) { ImreadModes rm = IMREAD_COLOR;//全部按照彩色解压 + if (scanParam.pixtype == 0) + rm = ImreadModes::IMREAD_GRAYSCALE; try { cv::Mat mat = cv::imdecode(*buf, rm); @@ -265,6 +273,8 @@ void ImageMatQueue::proc() for (auto& buf : uvbuffers) { ImreadModes rm = IMREAD_COLOR;//全部按照彩色解压 + if (scanParam.pixtype == 0) + rm = ImreadModes::IMREAD_GRAYSCALE; try { cv::Mat mat = cv::imdecode(*buf, rm); @@ -290,7 +300,7 @@ void ImageMatQueue::proc() std::vector rects; std::vector angleResults; bool isDesaskew = false; - + for (int j = 0; j < m_iaList.size(); j++) { m_iaList[j]->apply(mats, scanParam.is_duplex); CImageApply* ptr = m_iaList[j].get(); @@ -300,9 +310,8 @@ void ImageMatQueue::proc() isDesaskew = dynamic_cast(ptr)->isDesaskew(); } else if (typeid(*ptr) == typeid(CImageApplyRotation)) - angleResults = dynamic_cast(ptr)->angleResults(); - } - + angleResults = dynamic_cast(ptr)->angleResults(); + } if (!m_uvMats.empty()) { //拼接原图和UV图 @@ -313,12 +322,22 @@ void ImageMatQueue::proc() break; } cv::Mat mergeOrgin_UV = ImageApplyUV::Apply(mats[j], m_uvMats[j], rects[j], isDesaskew, angleResults.size() > 0 ? angleResults[j] : 0); - //cv::imwrite("D:/pic/mergeOrgin_UV" + std::to_string(j) + ".bmp", mergeOrgin_UV); + //cv::imwrite("D:/0.bmp", mergeOrgin_UV); if (!mergeOrgin_UV.empty()) mats[j] = mergeOrgin_UV; + } m_uvMats.clear(); } + if (scanParam.en_fold) + { + CImageApplyConcatenation Concatenation; + if(scanParam.en_uv) + Concatenation= CImageApplyConcatenation(CImageApplyConcatenation::vertical); + else + Concatenation = CImageApplyConcatenation(CImageApplyConcatenation::horizontal); + Concatenation.apply(mats, scanParam.is_duplex); + } for (int i = 0; i < mats.size(); i++) { if (!scanParam.is_duplex && i == 1) { @@ -331,6 +350,7 @@ void ImageMatQueue::proc() IMat2Bmp idata; idata = scanParam.pixtype == 0 ? (IMat2Bmp)Mat2BmpBw(mats[i], scanParam.resolution_dst) : Mat2Bmp(mats[i], scanParam.resolution_dst); auto data = idata.getBmpDataBuffer(); + CStdioFile file; EnqueueBmpBuffer(data); } else diff --git a/huagao/Device/ImageMatQueue.h b/huagao/Device/ImageMatQueue.h index fc1f7eb..461b503 100644 --- a/huagao/Device/ImageMatQueue.h +++ b/huagao/Device/ImageMatQueue.h @@ -89,7 +89,7 @@ public: int pos = col % 8; int pix = *(imageData + row * mat.step1() + col); temp = 1 << (7 - pos); - if (pix == 255) + if (pix ==255) { *(binary + (height - row - 1) * m_lineByte + col / 8) |= temp ; } diff --git a/huagao/Device/PublicFunc.cpp b/huagao/Device/PublicFunc.cpp index 1d58500..b264a32 100644 --- a/huagao/Device/PublicFunc.cpp +++ b/huagao/Device/PublicFunc.cpp @@ -437,8 +437,8 @@ CString GetHidedlgPath() SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE); #ifdef MAKEHUAGAO _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\hidedlg.exe")); -#else // MAKEHUAGAO - _tcscat(szIniFile, _T("\\twain_32\\ZhibenScan\\hidedlg.exe")); +#else defined MAKERTW + _tcscat(szIniFile, _T("\\twain_32\\RighTWayScan\\hidedlg.exe")); #endif int iLen = WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, NULL, 0, NULL, NULL); char* chRtn = new char[iLen * sizeof(char)]; diff --git a/huagao/G400ScanConfig.h b/huagao/G400ScanConfig.h index 64386dc..175bdb2 100644 --- a/huagao/G400ScanConfig.h +++ b/huagao/G400ScanConfig.h @@ -3,32 +3,33 @@ #include "Device/PublicFunc.h" #include "Device/PaperSize.h" -class G400ScanConfig : - public IConfig -{ -public: - union Configuration - { - struct - { - unsigned int pageSize : 5; - unsigned int isColor : 1; - unsigned int dpi : 2; - unsigned int doubleFeeded : 1; - unsigned int enableUV : 1; - unsigned int enableLed : 1; - unsigned int reversed1 : 6; - unsigned int isCorrect : 1; - unsigned int dstHeight : 8; - unsigned int reversed2 : 6; - }params; - unsigned int value; - }; - G400ScanConfig(GScanCap& gcap); - virtual ~G400ScanConfig(); - virtual unsigned int GetData() override; -private: - Configuration cfg; - Device::PaperSize PaperSize; -}; +#pragma once +//class G400ScanConfig : +// public IConfig +//{ +//public: +// union Configuration +// { +// struct +// { +// unsigned int pageSize : 5; +// unsigned int isColor : 1; +// unsigned int dpi : 2; +// unsigned int doubleFeeded : 1; +// unsigned int enableUV : 1; +// unsigned int enableLed : 1; +// unsigned int reversed1 : 6; +// unsigned int isCorrect : 1; +// unsigned int dstHeight : 8; +// unsigned int reversed2 : 6; +// }params; +// unsigned int value; +// }; +// G400ScanConfig(GScanCap& gcap); +// virtual ~G400ScanConfig(); +// virtual unsigned int GetData() override; +//private: +// Configuration cfg; +// Device::PaperSize PaperSize; +//}; diff --git a/huagao/ImageProcess/ImageApplyUV.cpp b/huagao/ImageProcess/ImageApplyUV.cpp index c710074..d7e6068 100644 --- a/huagao/ImageProcess/ImageApplyUV.cpp +++ b/huagao/ImageProcess/ImageApplyUV.cpp @@ -55,11 +55,9 @@ void ImageApplyUV::Apply(cv::Mat& image, const cv::Mat& uv, int dpi, int thresh) cv::Mat ImageApplyUV::Apply(const cv::Mat& image, const cv::Mat& uv, const cv::RotatedRect& uvRoi, bool isDesaskew, int angle) { if (uvRoi.size.width == 0) return cv::Mat(); - cv::RotatedRect uvRoi_clone = uvRoi; cv::Mat dst = cv::Mat::zeros(image.rows > image.cols ? image.rows : (image.rows * 2), image.cols > image.rows ? image.cols : (image.cols * 2), image.type()); image.copyTo(dst(cv::Rect(0, 0, image.cols, image.rows))); - cv::Mat dst_uv = dst(cv::Rect(image.rows > image.cols ? image.cols : 0, image.rows > image.cols ? 0 : image.rows, image.cols, image.rows)); if (isDesaskew) { @@ -92,7 +90,6 @@ cv::Mat ImageApplyUV::Apply(const cv::Mat& image, const cv::Mat& uv, const cv::R dstTri[1] = cv::Point2f(0, 0); dstTri[2] = cv::Point2f(dst_uv.cols - 1, 0); } - cv::Mat warp_mat = cv::getAffineTransform(srcTri, dstTri); if (uv.channels() == 1 && dst_uv.channels() == 3) { @@ -101,7 +98,9 @@ cv::Mat ImageApplyUV::Apply(const cv::Mat& image, const cv::Mat& uv, const cv::R cv::cvtColor(uv_temp, dst_uv, cv::COLOR_GRAY2BGR); } else + { cv::warpAffine(uv, dst_uv, warp_mat, dst_uv.size()); + } } else { @@ -112,7 +111,6 @@ cv::Mat ImageApplyUV::Apply(const cv::Mat& image, const cv::Mat& uv, const cv::R roi_dst_right.width = cv::min(dst_uv.cols, uvBoundingRect.width); roi_dst_right.y = dst_uv.rows > uvBoundingRect.height ? (dst_uv.rows - uvBoundingRect.height) / 2 : 0; roi_dst_right.height = cv::min(dst_uv.rows, uvBoundingRect.height); - cv::Rect roi_uv_BoundingRect((uvBoundingRect.width - roi_dst_right.width) / 2, (uvBoundingRect.height - roi_dst_right.height) / 2, roi_dst_right.width, roi_dst_right.height); @@ -120,7 +118,7 @@ cv::Mat ImageApplyUV::Apply(const cv::Mat& image, const cv::Mat& uv, const cv::R if (uvCrop.channels() == 1 && dst_uv.channels() == 3) cv::cvtColor(uvCrop, uvCrop, cv::COLOR_GRAY2BGR); uvCrop.copyTo(dst_uv(roi_dst_right)); - } + } return dst; } diff --git a/huagao/bitmap1.bmp b/huagao/bitmap1.bmp new file mode 100644 index 0000000..6e8e840 Binary files /dev/null and b/huagao/bitmap1.bmp differ diff --git a/huagao/huagaods.cpp b/huagao/huagaods.cpp index ecf2446..2b7f113 100644 --- a/huagao/huagaods.cpp +++ b/huagao/huagaods.cpp @@ -66,9 +66,15 @@ TWPP_ENTRY_MFC(HuagaoDs) static constexpr const Identity srcIdent( Version(3, 3, Language::English, Country::China, "v3.3.2.4"), DataGroup::Image, +#ifdef MAKEHUAGAO "HUAGO", "G300 Series", "HUAGOSCAN G300 UVTWAIN" +#else defined MAKERTW + "RIGHTWAY", + "G300 Series", + "RIGHTWAYSCAN G300 UVTWAIN" +#endif // MAKEHUAGAO #if defined(_MSC_VER) "" #elif defined(__GNUC__) @@ -378,6 +384,7 @@ Result HuagaoDs::eventProcess(const Identity&, Event& event) { // // QApplication::processEvents(); - TODO: needs more investigation; results in freeze when attempting to scan using old DSM // QApplication::sendPostedEvents(); guiTwain->SendMessage((UINT)(event.message())); + //guiTwain->PostMessage((UINT)(event.message())); } event.setMessage(Msg::Null); @@ -434,7 +441,8 @@ 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(0x31c9, 0x8200); + //scanner->open(0x3072, 0x0300); if (!scanner->IsConnected()) { ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE); return checkDeviceOnline(); @@ -1104,6 +1112,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return success(); case Msg::Set: { auto mech = data.currentItem(); + if(m_scanparam->pixtype==0) + return badValue(); m_scanparam->en_uv = mech; return success(); } @@ -2439,7 +2449,7 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) void HuagaoDs::DeviceEvent_callback(int eventID, void* usrdata) { HuagaoDs* This = (HuagaoDs*)usrdata; - This->onDeviceEvent(eventID); + //This->onDeviceEvent(eventID); } void HuagaoDs::onDeviceEvent(int eventID) @@ -2502,7 +2512,6 @@ Twpp::Result HuagaoDs::startScan() } scanner->ResetScanner(); - scanner->clear_hwerror(); 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)); @@ -2523,6 +2532,7 @@ Twpp::Result HuagaoDs::startScan() guiIndicator->ShowWindow(SW_SHOWNORMAL); } scanner->Scanner_StartScan(m_scanparam->scannum); + if (bmpData.size() > 0) bmpData.clear(); diff --git a/huagao/huagaotwds.rc b/huagao/huagaotwds.rc index 2525f54..7e81466 100644 Binary files a/huagao/huagaotwds.rc and b/huagao/huagaotwds.rc differ diff --git a/huagao/icon_rwlogo.bmp b/huagao/icon_rwlogo.bmp new file mode 100644 index 0000000..0892cf7 Binary files /dev/null and b/huagao/icon_rwlogo.bmp differ diff --git a/huagao/icon_rwlogo.png b/huagao/icon_rwlogo.png new file mode 100644 index 0000000..7f7013a Binary files /dev/null and b/huagao/icon_rwlogo.png differ diff --git a/huagao/resource.h b/huagao/resource.h index 9733c6c..b7bd228 100644 Binary files a/huagao/resource.h and b/huagao/resource.h differ diff --git a/huagao/stdafx.h b/huagao/stdafx.h index 4c2dcbc..327d9f4 100644 Binary files a/huagao/stdafx.h and b/huagao/stdafx.h differ