修改对折协议地址以及部分对折处理。

2021.2.4    修改对折ID为0x8037
2021.2.5    对折算法默认填充黑色修改为白色
	修改对折前旋转正面图像180°
This commit is contained in:
masayume 2021-02-08 11:11:06 +08:00
parent 0938e8467c
commit f1738d9a47
4 changed files with 30 additions and 17 deletions

View File

@ -269,7 +269,7 @@ void ImageMatQueue::setparam(const GScanCap& param)
if (scanParam.en_fold) if (scanParam.en_fold)
{ {
m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyConcatenation(CImageApplyConcatenation::horizontal))); m_iaList.push_back(shared_ptr<CImageApply>(new CImageApplyConcatenation(CImageApplyConcatenation::horizontal,cv::Scalar(255,255,255))));
} }
if (param.imageRotateDegree != 0.0 || param.is_backrotate180 || param.is_autotext) if (param.imageRotateDegree != 0.0 || param.is_backrotate180 || param.is_autotext)
@ -325,10 +325,9 @@ bool ImageMatQueue::queuesempty()
static int index = 0; static int index = 0;
void ImageMatQueue::proc() void ImageMatQueue::proc()
{ {
SYSTEM_INFO sys; int dwnumber = std::thread::thread::hardware_concurrency();
GetSystemInfo(&sys);
std::unique_ptr<ThreadPool> m_threadpool; std::unique_ptr<ThreadPool> m_threadpool;
m_threadpool.reset(new ThreadPool(sys.dwNumberOfProcessors < 4 ? 1 : sys.dwNumberOfProcessors / 2)); m_threadpool.reset(new ThreadPool(dwnumber < 4 ? 1 : dwnumber / 2));
while (bRun) { while (bRun) {
while (m_imagedata.Size() > 0) { while (m_imagedata.Size() > 0) {
this_thread::sleep_for(chrono::milliseconds(1)); this_thread::sleep_for(chrono::milliseconds(1));
@ -351,10 +350,6 @@ void ImageMatQueue::proc()
void ImageMatQueue::imageproceing(std::vector<std::shared_ptr<std::vector<char>>>& buffs) void ImageMatQueue::imageproceing(std::vector<std::shared_ptr<std::vector<char>>>& buffs)
{ {
//std::ostringstream oss;
//oss << std::this_thread::get_id();
//std::string stid = oss.str();
//writelog(stid);
vector<cv::Mat> mats; vector<cv::Mat> mats;
for (auto& buf : buffs) { for (auto& buf : buffs) {
ImreadModes rmc; ImreadModes rmc;
@ -421,7 +416,10 @@ void ImageMatQueue::imageproceing(std::vector<std::shared_ptr<std::vector<char>>
//FileTools::write_log("1.txt", " dogear time " + to_string(sw.elapsed_ms())); //FileTools::write_log("1.txt", " dogear time " + to_string(sw.elapsed_ms()));
if (scanParam.is_switchfrontback) if (scanParam.is_switchfrontback)
swap(mats[0], mats[1]); swap(mats[0], mats[1]);
if (scanParam.en_fold != 0) {
cv::flip(mats[0], mats[0], 1);
cv::flip(mats[0], mats[0], 0);
}
for (int j = 0; j < m_iaList.size(); j++) { for (int j = 0; j < m_iaList.size(); j++) {
m_iaList[j]->apply(mats, scanParam.is_duplex); m_iaList[j]->apply(mats, scanParam.is_duplex);
} }

View File

@ -2,7 +2,7 @@
CImageApplyConcatenation::CImageApplyConcatenation() CImageApplyConcatenation::CImageApplyConcatenation()
: m_direction(autoDirection) : m_direction(autoDirection)
, m_BG_color(0, 0, 0) , m_BG_color(255, 255, 255)
{ {
} }

View File

@ -44,6 +44,7 @@ enum class CapTypeEx : unsigned short {
TwEx_Sharpen = 0x8022, TwEx_Sharpen = 0x8022,
TwEx_DBAreaNum = 0x8027, TwEx_DBAreaNum = 0x8027,
TwEx_DBDevnMax = 0x8028, TwEx_DBDevnMax = 0x8028,
TwEx_EnFold=0x8037,
TwEx_StableDetectEnable = 0x8090, TwEx_StableDetectEnable = 0x8090,
TwEx_UVModel = 0x8093, TwEx_UVModel = 0x8093,
TwEx_SwitchFrontBack = 0x8094, TwEx_SwitchFrontBack = 0x8094,
@ -77,7 +78,7 @@ using namespace std::placeholders;
TWPP_ENTRY_MFC(HuagaoDs) TWPP_ENTRY_MFC(HuagaoDs)
static constexpr const Identity srcIdent( static constexpr const Identity srcIdent(
Version(3, 3, Language::English, Country::China, "v3.3.4.2"), Version(3, 3, Language::English, Country::China, "v3.3.4.3"),
DataGroup::Image, DataGroup::Image,
#ifdef MAKEHUAGAO #ifdef MAKEHUAGAO
"HUAGO", "HUAGO",
@ -717,7 +718,6 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
} }
} }
} }
m_haveError = false; m_haveError = false;
updataGscanCap(); updataGscanCap();
bmpData->resize(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)); bmpData->resize(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
@ -1258,11 +1258,26 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
return CapSupGetAllReset<Bool, Bool, CapType::IAutomaticBorderDetection>(msg, data, { false,true }, m_autoboarderdetcet, false, m_autoboarderdetcet ? 1 : 0, 0); return CapSupGetAllReset<Bool, Bool, CapType::IAutomaticBorderDetection>(msg, data, { false,true }, m_autoboarderdetcet, false, m_autoboarderdetcet ? 1 : 0, 0);
}; };
m_query[CapType::IImageMerge] = msgSupportGetAllSetReset; //m_query[CapType::IImageMerge] = msgSupportGetAllSetReset;
m_caps[CapType::IImageMerge] = [this](Msg msg, Capability& data)->Result { //m_caps[CapType::IImageMerge] = [this](Msg msg, Capability& data)->Result {
// if (Msg::Set == msg) {
// auto autocrop = data.currentItem<CapType::IImageMerge>();
// m_scanparam->en_fold = (byte)autocrop;
// if ((UInt16)autocrop != 0){
// m_scanparam->is_duplex = 1;
// m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏
// m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0;
// }
// return success();
// }
// return CapSupGetAllResetEx<byte, UInt16, CapType::IImageMerge>(msg, data, m_scanparam->en_fold, 0);
//};
m_query[CapType(CapTypeEx::TwEx_EnFold)] = msgSupportGetAllSetReset;
m_caps[CapType(CapTypeEx::TwEx_EnFold)] = [this](Msg msg, Capability& data)->Result {
if (Msg::Set == msg) { if (Msg::Set == msg) {
auto autocrop = data.currentItem<CapType::IImageMerge>(); auto autocrop = data.currentItem<Int32>();
m_scanparam->en_fold = (byte)autocrop; m_scanparam->en_fold = (Int32)autocrop;
if ((UInt16)autocrop != 0){ if ((UInt16)autocrop != 0){
m_scanparam->is_duplex = 1; m_scanparam->is_duplex = 1;
m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏 m_scanparam->autodescrew = 1;//合并可用时 默认自动纠偏
@ -1270,7 +1285,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
} }
return success(); return success();
} }
return CapSupGetAllResetEx<byte, UInt16, CapType::IImageMerge>(msg, data, m_scanparam->en_fold, 0); return CapSupGetAllResetEx<byte, Int32, (CapType)CapTypeEx::TwEx_EnFold>(msg, data, { 0,1 }, m_scanparam->en_fold, 0,m_scanparam->en_fold ? 1 : 0, 0);
}; };
m_query[CapType::IAutoDiscardBlankPages] = msgSupportGetAllSetReset; m_query[CapType::IAutoDiscardBlankPages] = msgSupportGetAllSetReset;

Binary file not shown.