sane调整双张扫描流程,保留后自动扫描
This commit is contained in:
parent
0a802db95e
commit
dd1cd32e98
|
@ -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);
|
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);
|
emit p->newImage(image);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
p->m_abnormlImageStatus = HGSANE_IMAGE_STATUS_DISCARD;
|
|
||||||
return HGBASE_ERR_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return HGBASE_ERR_OK;
|
return imgRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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__ */
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue