diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index 6bc9b933..5a63172f 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -1036,6 +1036,10 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) HGUInt doubleImgRet = HGBASE_ERR_OK; bool clickedReserveImg = false; + int imageCount =0; + int scanCount = -1; + p->GetScanCount(&scanCount); + while (!p->m_stopThread) { SANE_Parameters params; @@ -1152,6 +1156,7 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) // 普通图片或第二个双张图片 p->m_imageFunc((HGSaneDevice)p, img, HGSANE_IMAGE_TYPE_NORMAL, p->m_imageParam); doubleImgRet = HGBASE_ERR_OK; + imageCount++; } HGBase_DestroyImage(img); @@ -1162,7 +1167,11 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) buffer = NULL; bufferSize = 0; - if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet) + // 保留双张后继续扫描,重置图像数量,然后重新按照指定张数扫描 + if (clickedReserveImg) + imageCount = 0; + + if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet || (imageCount == scanCount * 2 && !clickedReserveImg)) //图像数量和扫描张数对应时正常结束扫描,双张保留则继续扫描 { saneAPI.sane_cancel_api(p->m_devHandle); if (NULL != p->m_scanNotify) @@ -1185,11 +1194,16 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) break; } - else if (SANE_STATUS_GOOD != stat && HGSANE_ERR_UI_RESERVE_CHECK != doubleImgStat) + else if (SANE_STATUS_GOOD != stat) { - if (NULL != p->m_scanNotify) - p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, (void*)saneAPI.sane_strstatus_api(stat), (int)stat); - break; + if ((SCANNER_ERR_DEVICE_DOUBLE_FEEDING != stat && HGSANE_ERR_UI_RESERVE_CHECK == doubleImgStat) || + HGSANE_ERR_UI_RESERVE_CHECK != doubleImgStat) + { + if (NULL != p->m_scanNotify) + p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, (void*)saneAPI.sane_strstatus_api(stat), (int)stat); + + break; + } } if (SANE_STATUS_GOOD == stat)