diff --git a/app/scanner2/device_user.cpp b/app/scanner2/device_user.cpp index ee6a80d8..77d5d6d7 100644 --- a/app/scanner2/device_user.cpp +++ b/app/scanner2/device_user.cpp @@ -216,7 +216,8 @@ DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &passwor m_source = source; m_saneDev = nullptr; m_password = password; - m_reserveImage = false; + m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS; + m_abnormalImageResult = HGBASE_ERR_OK; } DeviceUser::~DeviceUser() @@ -367,31 +368,37 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer if (HGSANE_EVENT_TYPE_SCANFINISHED == event) { emit p->scanFinishEvent(); - p->m_reserveImage = false; + 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; - HGUInt result = HGBASE_ERR_OK; - if (HGSANE_IMAGE_TYPE_DOUBLE == type && !p->m_reserveImage) + + if (HGSANE_IMAGE_TYPE_DOUBLE == type && HGSANE_IMAGE_STATUS_NO_STATUS == p->m_abnormlImageStatus) { - emit p->abnormalImage(image, &result); + emit p->abnormalImage(image, &p->m_abnormalImageResult); } - if (HGBASE_ERR_OK == result) + if (HGBASE_ERR_OK == p->m_abnormalImageResult || HGSANE_IMAGE_STATUS_RESERVE == p->m_abnormlImageStatus) { - p->m_reserveImage = true; + if (HGSANE_IMAGE_TYPE_DOUBLE == type) + p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_RESERVE; + emit p->newImage(image); } else { - return HGSANE_ERR_STOPSCAN; + p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD; + return HGBASE_ERR_FAIL; } return HGBASE_ERR_OK; diff --git a/app/scanner2/device_user.h b/app/scanner2/device_user.h index 0cdd9b63..8d446525 100644 --- a/app/scanner2/device_user.h +++ b/app/scanner2/device_user.h @@ -134,7 +134,8 @@ private: HGSaneDevice m_saneDev; QString m_password; - bool m_reserveImage; + HGUInt m_abnormlImageStatus; + HGUInt m_abnormalImageResult; }; #endif diff --git a/modules/sane_user/HGSane.h b/modules/sane_user/HGSane.h index 411de9af..72efd407 100644 --- a/modules/sane_user/HGSane.h +++ b/modules/sane_user/HGSane.h @@ -42,6 +42,10 @@ 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/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index 133d4388..b8ed0410 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -1121,8 +1121,7 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) 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 (HGSANE_ERR_STOPSCAN == imgRet) - stopScan = true; + HGBase_DestroyImage(img); } } @@ -1131,13 +1130,13 @@ 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 (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 (!p->m_cancelScan) {