sane调整双张扫描流程,保留后自动扫描

This commit is contained in:
yangjiaxuan 2023-10-27 18:10:53 +08:00
parent 0a802db95e
commit dd1cd32e98
6 changed files with 32 additions and 41 deletions

View File

@ -216,8 +216,6 @@ DeviceUser::DeviceUser(QWidget *wnd, HGSaneSource source, const QString &passwor
m_source = source; m_source = source;
m_saneDev = nullptr; m_saneDev = nullptr;
m_password = password; m_password = password;
m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
m_abnormalImageResult = HGBASE_ERR_OK;
} }
DeviceUser::~DeviceUser() DeviceUser::~DeviceUser()
@ -368,40 +366,30 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer
if (HGSANE_EVENT_TYPE_SCANFINISHED == event) if (HGSANE_EVENT_TYPE_SCANFINISHED == event)
{ {
emit p->scanFinishEvent(); emit p->scanFinishEvent();
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_NO_STATUS;
p->m_abnormalImageResult = HGBASE_ERR_OK;
} }
else if (HGSANE_EVENT_TYPE_WORKING == event) else if (HGSANE_EVENT_TYPE_WORKING == event)
{ {
emit p->scanWorkingEvent(); 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) HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param)
{ {
DeviceUser* p = (DeviceUser*)param; DeviceUser* p = (DeviceUser*)param;
if (type != HGSANE_IMAGE_TYPE_DOUBLE)
if (HGSANE_IMAGE_TYPE_DOUBLE == type && HGSANE_IMAGE_STATUS_NO_STATUS == p->m_abnormlImageStatus)
{ {
emit p->abnormalImage(image, &p->m_abnormalImageResult);
}
if (HGBASE_ERR_OK == p->m_abnormalImageResult || HGSANE_IMAGE_STATUS_RESERVE == p->m_abnormlImageStatus)
{
if (HGSANE_IMAGE_TYPE_DOUBLE == type)
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_RESERVE;
emit p->newImage(image); emit p->newImage(image);
}
else
{
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD;
return HGBASE_ERR_FAIL;
}
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
HGUInt imgRet = HGBASE_ERR_OK;
emit p->abnormalImage(image, &imgRet);
if (HGSANE_ERR_IMAGE_RESERVE == imgRet)
{
emit p->newImage(image);
}
return imgRet;
}
#endif #endif

View File

@ -133,9 +133,6 @@ private:
HGSaneSource m_source; HGSaneSource m_source;
HGSaneDevice m_saneDev; HGSaneDevice m_saneDev;
QString m_password; QString m_password;
HGUInt m_abnormlImageStatus;
HGUInt m_abnormalImageResult;
}; };
#endif #endif

View File

@ -29,12 +29,12 @@ HGUInt Dialog_AbnormalImage::getResult()
void Dialog_AbnormalImage::on_pushButton_reserve_clicked() void Dialog_AbnormalImage::on_pushButton_reserve_clicked()
{ {
m_result = HGBASE_ERR_OK; m_result = HGSANE_ERR_IMAGE_RESERVE;
close(); close();
} }
void Dialog_AbnormalImage::on_pushButton_discard_clicked() void Dialog_AbnormalImage::on_pushButton_discard_clicked()
{ {
m_result = HGBASE_ERR_FAIL; m_result = HGSANE_ERR_IMAGE_DISCARD;
close(); close();
} }

View File

@ -42,10 +42,6 @@ typedef struct
#define HGSANE_IMAGE_TYPE_NORMAL 0L #define HGSANE_IMAGE_TYPE_NORMAL 0L
#define HGSANE_IMAGE_TYPE_DOUBLE 1L #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回调 /* Sane回调
*/ */
typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param); typedef void (HGAPI* HGSane_DeviceEventFunc)(HGSaneDevice dev, HGUInt event, HGPointer param);

View File

@ -7,7 +7,10 @@
/* 设备离线 */ /* 设备离线 */
#define HGSANE_ERR_DEVICEOFFLINE 0x00004002L #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__ */ #endif /* __HGSANEERR_H__ */

View File

@ -1015,6 +1015,8 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
return; return;
} }
// 双张图像处理的返回值
HGUInt doubleImgRet = HGBASE_ERR_OK;
while (!p->m_stopThread) while (!p->m_stopThread)
{ {
SANE_Parameters params; SANE_Parameters params;
@ -1095,7 +1097,6 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
if (NULL != p->m_scanNotify) if (NULL != p->m_scanNotify)
p->m_scanNotify((int)SANE_EVENT_IMAGE_OK, NULL, 0); p->m_scanNotify((int)SANE_EVENT_IMAGE_OK, NULL, 0);
bool stopScan = false;
if (nullptr != p->m_imageFunc) if (nullptr != p->m_imageFunc)
{ {
HGUInt imgType = 0; HGUInt imgType = 0;
@ -1118,9 +1119,16 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
if (NULL != img) if (NULL != img)
{ {
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi); HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
HGUInt type = (SCANNER_ERR_DEVICE_DOUBLE_FEEDING == stat1) if (HGBASE_ERR_OK == doubleImgRet && 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); // 第一个双张图片
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); HGBase_DestroyImage(img);
} }
@ -1130,13 +1138,12 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
buffer = NULL; buffer = NULL;
bufferSize = 0; bufferSize = 0;
// if (stopScan) if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet)
// { {
// saneAPI.sane_cancel_api(p->m_devHandle); if (NULL != p->m_scanNotify)
// if (NULL != p->m_scanNotify) p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0);
// p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0); break;
// break; }
// }
if (!p->m_cancelScan) if (!p->m_cancelScan)
{ {