From dd1cd32e9802fe61695cc9fb2040a5917e6c8838 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 27 Oct 2023 18:10:53 +0800 Subject: [PATCH] =?UTF-8?q?sane=E8=B0=83=E6=95=B4=E5=8F=8C=E5=BC=A0?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=B5=81=E7=A8=8B=EF=BC=8C=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E5=90=8E=E8=87=AA=E5=8A=A8=E6=89=AB=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner2/device_user.cpp | 26 +++++++----------------- app/scanner2/device_user.h | 3 --- app/scanner2/dialog_abnormalimage.cpp | 4 ++-- modules/sane_user/HGSane.h | 4 ---- modules/sane_user/HGSaneErr.h | 7 +++++-- modules/sane_user/HGSaneImpl.cpp | 29 +++++++++++++++++---------- 6 files changed, 32 insertions(+), 41 deletions(-) diff --git a/app/scanner2/device_user.cpp b/app/scanner2/device_user.cpp index 77d5d6d7..a39b377a 100644 --- a/app/scanner2/device_user.cpp +++ b/app/scanner2/device_user.cpp @@ -216,8 +216,6 @@ DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &passwor m_source = source; m_saneDev = nullptr; m_password = password; - m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS; - m_abnormalImageResult = HGBASE_ERR_OK; } DeviceUser::~DeviceUser() @@ -368,40 +366,30 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer if (HGSANE_EVENT_TYPE_SCANFINISHED == event) { emit p->scanFinishEvent(); - p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS; - p->m_abnormalImageResult = HGBASE_ERR_OK; } else if (HGSANE_EVENT_TYPE_WORKING == event) { emit p->scanWorkingEvent(); - p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS; - p->m_abnormalImageResult = HGBASE_ERR_OK; } } HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param) { DeviceUser* p = (DeviceUser*)param; - - if (HGSANE_IMAGE_TYPE_DOUBLE == type && HGSANE_IMAGE_STATUS_NO_STATUS == p->m_abnormlImageStatus) + if (type != HGSANE_IMAGE_TYPE_DOUBLE) { - emit p->abnormalImage(image, &p->m_abnormalImageResult); + emit p->newImage(image); + return HGBASE_ERR_OK; } - if (HGBASE_ERR_OK == p->m_abnormalImageResult || HGSANE_IMAGE_STATUS_RESERVE == p->m_abnormlImageStatus) + HGUInt imgRet = HGBASE_ERR_OK; + emit p->abnormalImage(image, &imgRet); + if (HGSANE_ERR_IMAGE_RESERVE == imgRet) { - if (HGSANE_IMAGE_TYPE_DOUBLE == type) - p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_RESERVE; - emit p->newImage(image); } - else - { - p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD; - return HGBASE_ERR_FAIL; - } - return HGBASE_ERR_OK; + return imgRet; } #endif diff --git a/app/scanner2/device_user.h b/app/scanner2/device_user.h index 8d446525..9e214752 100644 --- a/app/scanner2/device_user.h +++ b/app/scanner2/device_user.h @@ -133,9 +133,6 @@ private: HGSaneSource m_source; HGSaneDevice m_saneDev; QString m_password; - - HGUInt m_abnormlImageStatus; - HGUInt m_abnormalImageResult; }; #endif diff --git a/app/scanner2/dialog_abnormalimage.cpp b/app/scanner2/dialog_abnormalimage.cpp index 825f0a6a..b041cff0 100644 --- a/app/scanner2/dialog_abnormalimage.cpp +++ b/app/scanner2/dialog_abnormalimage.cpp @@ -29,12 +29,12 @@ HGUInt Dialog_AbnormalImage::getResult() void Dialog_AbnormalImage::on_pushButton_reserve_clicked() { - m_result = HGBASE_ERR_OK; + m_result = HGSANE_ERR_IMAGE_RESERVE; close(); } void Dialog_AbnormalImage::on_pushButton_discard_clicked() { - m_result = HGBASE_ERR_FAIL; + m_result = HGSANE_ERR_IMAGE_DISCARD; close(); } diff --git a/modules/sane_user/HGSane.h b/modules/sane_user/HGSane.h index 72efd407..411de9af 100644 --- a/modules/sane_user/HGSane.h +++ b/modules/sane_user/HGSane.h @@ -42,10 +42,6 @@ typedef struct #define HGSANE_IMAGE_TYPE_NORMAL 0L #define HGSANE_IMAGE_TYPE_DOUBLE 1L -#define HGSANE_IMAGE_STATUS_NO_STATUS 0L -#define HGSANE_IMAGE_STATUS_RESERVE 1L -#define HGSANE_IMAGE_STATUS_DISCARD 2L - /* Sane回调 */ typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param); diff --git a/modules/sane_user/HGSaneErr.h b/modules/sane_user/HGSaneErr.h index dad8a5d4..9ed54aa2 100644 --- a/modules/sane_user/HGSaneErr.h +++ b/modules/sane_user/HGSaneErr.h @@ -7,7 +7,10 @@ /* 设备离线 */ #define HGSANE_ERR_DEVICEOFFLINE 0x00004002L -/* 停止扫描 */ -#define HGSANE_ERR_STOPSCAN 0x00004003L +/* 保留图像 */ +#define HGSANE_ERR_IMAGE_RESERVE 0x00004003L + +/* 丢弃图像 */ +#define HGSANE_ERR_IMAGE_DISCARD 0x00004004L #endif /* __HGSANEERR_H__ */ diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index b8ed0410..dfa2e164 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -1015,6 +1015,8 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) return; } + // 双张图像处理的返回值 + HGUInt doubleImgRet = HGBASE_ERR_OK; while (!p->m_stopThread) { SANE_Parameters params; @@ -1095,7 +1097,6 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) if (NULL != p->m_scanNotify) p->m_scanNotify((int)SANE_EVENT_IMAGE_OK, NULL, 0); - bool stopScan = false; if (nullptr != p->m_imageFunc) { HGUInt imgType = 0; @@ -1118,9 +1119,16 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) if (NULL != img) { HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi); - HGUInt type = (SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1) - ? HGSANE_IMAGE_TYPE_DOUBLE : HGSANE_IMAGE_TYPE_NORMAL; - HGUInt imgRet = p->m_imageFunc((HGSaneDevice)p, img, type, p->m_imageParam); + if (HGBASE_ERR_OK == doubleImgRet && SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1) + { + // 第一个双张图片 + doubleImgRet = p->m_imageFunc((HGSaneDevice)p, img, HGSANE_IMAGE_TYPE_DOUBLE, p->m_imageParam); + } + else + { + // 普通图片或非双张图片 + p->m_imageFunc((HGSaneDevice)p, img, HGSANE_IMAGE_TYPE_NORMAL, p->m_imageParam); + } HGBase_DestroyImage(img); } @@ -1130,13 +1138,12 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) buffer = NULL; bufferSize = 0; -// if (stopScan) -// { -// saneAPI.sane_cancel_api(p->m_devHandle); -// if (NULL != p->m_scanNotify) -// p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0); -// break; -// } + if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet) + { + if (NULL != p->m_scanNotify) + p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0); + break; + } if (!p->m_cancelScan) {