From df6f15a776f1248a147ab04c40eb51dfc5933420 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Tue, 30 Jan 2024 17:48:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=9B=BD=E4=BA=A7=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=8C=87=E5=AE=9A=E6=89=AB=E6=8F=8F=E5=BC=A0=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E4=BC=9A=E4=B8=80=E7=9B=B4=E6=89=AB=E6=8F=8F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9BBUG-889=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=9B=BD=E4=BA=A7=E7=B3=BB=E7=BB=9F=E9=80=89=E6=8B=A9=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=9B=BE=E5=83=8F=E5=B9=B6=E6=A0=A1=E9=AA=8C=EF=BC=8C?= =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E6=A3=80=E6=B5=8B=E4=B8=8D=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9BBUG-892?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/sane_user/HGSaneImpl.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) 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)