diff --git a/IConfig.h b/IConfig.h new file mode 100644 index 0000000..c369b59 --- /dev/null +++ b/IConfig.h @@ -0,0 +1,10 @@ +#pragma once + +class IConfig +{ +public: + IConfig(void) {}; + virtual ~IConfig(void) {}; + virtual unsigned int GetData() = 0; +}; + diff --git a/IGDevice.h b/IGDevice.h index 7bac6ae..f23ede9 100644 --- a/IGDevice.h +++ b/IGDevice.h @@ -31,8 +31,8 @@ enum Cam_Options { scanner_error_clean ,//异常清除 scanner_Init_Status, //状态初始化使能 scanner_IIC_Config, //IIC配置使能 - scanner_Speed_Config //速度配置使能 - + scanner_Speed_Config, //速度配置使能 + scanner_scan_status }; class IGDevice diff --git a/ImageMatQueue.cpp b/ImageMatQueue.cpp index 536e202..d04121e 100644 --- a/ImageMatQueue.cpp +++ b/ImageMatQueue.cpp @@ -32,8 +32,10 @@ ImageMatQueue::~ImageMatQueue(void) bRun = false; at_prced_image_remains = 0; atm_orgin_image_remains = 0; + XdPrint("closeing m_threadProc\n"); m_threadProc->join(); m_threadProc = NULL; + XdPrint("closed m_threadProc\n"); } } @@ -43,11 +45,12 @@ void ImageMatQueue::pushMat(JpegBuffer& data) m_pImages.Put(data); atm_orgin_image_remains++; } - +static int outnum =0; cv::Mat ImageMatQueue::popMat() { std::lock_guard lock(m_mtxJB); cv::Mat mat = _popMat(); + XdPrint("dequeue image %d \n", outnum++); at_prced_image_remains--; return mat; } @@ -111,7 +114,7 @@ void ImageMatQueue::PaniusCount() void ImageMatQueue::SetScanningStatus(bool isscannning) { - std::lock_guard lock(m_Locker); + std::lock_guard lock(m_mtxscan); iscanning = isscannning; } @@ -129,60 +132,68 @@ void ImageMatQueue::release_img_prc_thread() bool ImageMatQueue::empty() { - return ((atm_orgin_image_remains == 0 && + bool ret= ((atm_orgin_image_remains == 0 && at_prced_image_remains == 0) && (!iscanning)); + return ret; } +static int index=0; void ImageMatQueue::proc() { JpegBuffer jb; while (bRun) { + if (m_pImages.Size() <= 0) + { + continue; + } jb = m_pImages.Take(); if (!m_pImages.IsShutDown() && !jb.empty()) { vector mats = jb.getMats(); - if (scanParam.m_OutHole.EnOutHole && mats.size() == 2){ //确保能够获取正反两面图 - if (!mats[0].empty() && !mats[1].empty()) - ImageOutHole().puncture(mats[0], mats[1], 50.0, scanParam.m_OutHole.OutHoleRatio / 100.0, 50); - } + //if (scanParam.m_OutHole.EnOutHole && mats.size() == 2){ //确保能够获取正反两面图 + // if (!mats[0].empty() && !mats[1].empty()) + // ImageOutHole().puncture(mats[0], mats[1], 50.0, scanParam.m_OutHole.OutHoleRatio / 100.0, 50); + //} + + //for (int i = 0; i < mats.size(); i++) { + // if (!mats[i].empty()) { + // for (int j = 0; j < m_iaList.size(); j++) { + // if (mats[i].empty())//剔除空白页 + // break; + + // m_iaList[j]->apply(mats[i], i); + // } + // } + //} for (int i = 0; i < mats.size(); i++) { - if (!mats[i].empty()) { - for (int j = 0; j < m_iaList.size(); j++) { - if (mats[i].empty())//剔除空白页 - break; + //if (!scanParam.m_bDuplex && i == 1) { + // mats[i].release(); + // break; + //} - m_iaList[j]->apply(mats[i], i); - } - } - } - - for (int i = 0; i < mats.size(); i++) { - if (!scanParam.m_bDuplex && i == 1) { - mats[i].release(); - break; - } - - if (!mats[i].empty()) + if (!mats[i].empty()){ EnqueueMat(mats[i]); - } - - if (scanParam.m_bMultiOutput) - { - for (int i = 0; i < mats.size(); i++) - { - ImageMultiOutput m_mlt; - Mat m_filterMat = m_mlt.GetMultiFilterMat(mats[i], 2); - if (!m_filterMat.empty()) { - if (!scanParam.m_bDuplex && i == 1) { - mats[i].release(); - break; - } - - if (!m_filterMat.empty()) - EnqueueMat(m_filterMat); - } + XdPrint("enqueue image %d \n", index++); } } + + //if (scanParam.m_bMultiOutput) + //{ + // for (int i = 0; i < mats.size(); i++) + // { + // ImageMultiOutput m_mlt; + // Mat m_filterMat = m_mlt.GetMultiFilterMat(mats[i], 2); + // if (!m_filterMat.empty()) { + // if (!scanParam.m_bDuplex && i == 1) { + // mats[i].release(); + // break; + // } + + // if (!m_filterMat.empty()) + // EnqueueMat(m_filterMat); + // } + // } + //} PaniusCount(); } jb = JpegBuffer(); diff --git a/ImageMatQueue.h b/ImageMatQueue.h index 3cfa15b..9da78dc 100644 --- a/ImageMatQueue.h +++ b/ImageMatQueue.h @@ -44,6 +44,7 @@ private: BlockingQueue m_pImages; std::mutex m_Locker; std::mutex m_mtxJB; + std::mutex m_mtxscan; std::unique_ptr m_threadProc; volatile bool bRun; bool isduplex; diff --git a/config_new.cpp b/config_new.cpp new file mode 100644 index 0000000..34a6614 --- /dev/null +++ b/config_new.cpp @@ -0,0 +1,77 @@ +#include "stdafx.h" +#include "config_new.h" + +config_new::config_new(SFreeImage param) +{ + ms.value = 0; + init_paperdic(); + init_colormodedic(); + init_dpidic(); + set_unused_default_value(); + ms.double_paper = param.m_HardWareParams.DoubleFeederOn; + ms.color_model = pixType[param.m_HardWareParams.PixType]; + ms.dpi = resolutions[param.m_HardWareParams.Resolution]; + ms.papar_type = paperTypes[param.m_HardWareParams.PaperType]; + ms.paper = ms.papar_type == 3; + ms.skew_enable = param.m_HardWareParams.SkrewDetectOn; + ms.skew_parameter = param.m_HardWareParams.SkrewDetectLevel; + ms.staple_enable = param.m_HardWareParams.StapleDetectOn; +} + +config_new::~config_new(void) +{ +} + +unsigned int config_new::GetData() +{ + return ms.value; +} + +void config_new::init_paperdic(void) +{ + paperTypes.insert(std::pair(11, 0));//A3 + paperTypes.insert(std::pair(1, 1));//A4 + paperTypes.insert(std::pair(60, 2));//A4R + paperTypes.insert(std::pair(5, 2));//A5 + paperTypes.insert(std::pair(61, 2));//A5R + paperTypes.insert(std::pair(13, 2));//A6 + paperTypes.insert(std::pair(62, 2));//A6R + paperTypes.insert(std::pair(6, 0));//B4 + paperTypes.insert(std::pair(2, 0));//B5 + paperTypes.insert(std::pair(70, 1));//B5R + paperTypes.insert(std::pair(7, 2));//B6 + paperTypes.insert(std::pair(71, 2));//B6R + paperTypes.insert(std::pair(3, 1));//LETTER + paperTypes.insert(std::pair(80, 2));//LETTERR + paperTypes.insert(std::pair(81, 0));//DOUBLE LETTER + paperTypes.insert(std::pair(4, 0));//LEGAL + paperTypes.insert(std::pair(90, 0));//Auto 按照A3进行扫描 + paperTypes.insert(std::pair(91, 3));//长文稿 +} + +void config_new::init_colormodedic(void) +{ + pixType.insert(std::pair(0, 0));//BW + pixType.insert(std::pair(1, 0));//Gray + pixType.insert(std::pair(2, 1));//RGB +} + +void config_new::init_dpidic(void) +{ + resolutions.insert(std::pair(300, 1));//300 + resolutions.insert(std::pair(200, 0));//200 + resolutions.insert(std::pair(600, 2));//600 +} + +void config_new::set_unused_default_value(void) +{ + ms.error_clean = 0; + ms.iic_config = 0; + ms.iic_config_addr = 0; + ms.pick_paper = 0; + ms.scan_enable = 0; + ms.status_init = 0; + ms.v_setting = 0; + ms.speed_set_enable = 0; + ms.key_staple_enable = 0; +} diff --git a/config_new.h b/config_new.h new file mode 100644 index 0000000..ae26800 --- /dev/null +++ b/config_new.h @@ -0,0 +1,25 @@ +#pragma once +#include "IConfig.h" +#include "PublicFunc.h" +#include "device_common.h" +#include + +class config_new : + public IConfig +{ +public : + config_new(SFreeImage param); + virtual ~config_new(void); + virtual unsigned int GetData() override; +private: + void init_paperdic(void); + void init_colormodedic(void); + void init_dpidic(void); + void set_unused_default_value(void); +private: + std::map paperTypes; + std::map pixType; + std::map resolutions; + MotorSetting ms; +}; + diff --git a/hugaotwainds.aps b/hugaotwainds.aps new file mode 100644 index 0000000..c46b6a8 Binary files /dev/null and b/hugaotwainds.aps differ diff --git a/hugaotwainds.vcxproj b/hugaotwainds.vcxproj index 7d2c1aa..a511f73 100644 --- a/hugaotwainds.vcxproj +++ b/hugaotwainds.vcxproj @@ -220,6 +220,7 @@ + @@ -291,6 +292,7 @@ + @@ -305,6 +307,7 @@ + diff --git a/hugaotwainds.vcxproj.filters b/hugaotwainds.vcxproj.filters index 09d0954..dad94b6 100644 --- a/hugaotwainds.vcxproj.filters +++ b/hugaotwainds.vcxproj.filters @@ -201,6 +201,9 @@ 鍥惧儚澶勭悊 + + 浠g爜鏂囦欢 + @@ -421,6 +424,12 @@ 澶存枃浠 + + 澶存枃浠 + + + 澶存枃浠 + diff --git a/hugaotwainds.vcxproj.user b/hugaotwainds.vcxproj.user index af65007..ad2d9c4 100644 --- a/hugaotwainds.vcxproj.user +++ b/hugaotwainds.vcxproj.user @@ -12,7 +12,7 @@ WindowsLocalDebugger - C:\Users\holdtecs\Desktop\鏋佽Twain娴嬭瘯灏忚蒋浠秗elease锛32bit锛塡Sample.WPF.exe + E:\杞欢瀹夎鍖匼xnviewer\xnviewer\xnview.exe ..\..\..\..\Windows\twain_32\huagoscan WindowsLocalDebugger diff --git a/scn_config.cpp b/scn_config.cpp index 42fc86c..1ebf17a 100644 --- a/scn_config.cpp +++ b/scn_config.cpp @@ -117,7 +117,7 @@ void hgConfigClass::setSkewDelection(bool value) setBit(11, value); } -UINT32 hgConfigClass::GetData() +unsigned int hgConfigClass::GetData() { return m_data.to_ulong(); } diff --git a/scn_config.h b/scn_config.h index af7a4da..e7156b0 100644 --- a/scn_config.h +++ b/scn_config.h @@ -5,17 +5,18 @@ #include #include #include "PublicFunc.h" +#include "IConfig.h" typedef unsigned short uint16_t; -class hgConfigClass +class hgConfigClass:public IConfig { public: hgConfigClass(); hgConfigClass(SFreeImage param); - ~hgConfigClass(); + virtual ~hgConfigClass(); - UINT32 GetData(); + virtual unsigned int GetData() override; private: enum Config_Scanner {