解决国产系统单面或对折与多流同时开启时,双张校验图像不弹窗的问题;
This commit is contained in:
parent
ea2c615497
commit
7d315ffc88
|
@ -1024,6 +1024,10 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
HGInt spliteImgCount = 0;
|
HGInt spliteImgCount = 0;
|
||||||
p->GetSpliteImgCount(&spliteImgCount);
|
p->GetSpliteImgCount(&spliteImgCount);
|
||||||
|
|
||||||
|
// 获取当前是否开启对折或者单面模式
|
||||||
|
HGBool isFold = false;
|
||||||
|
p->GetIsFold(&isFold);
|
||||||
|
|
||||||
HGInt multioutSpliteImgCount = 0;
|
HGInt multioutSpliteImgCount = 0;
|
||||||
|
|
||||||
SANE_Status stat = saneAPI.sane_start_api(p->m_devHandle);
|
SANE_Status stat = saneAPI.sane_start_api(p->m_devHandle);
|
||||||
|
@ -1184,10 +1188,21 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param)
|
||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
bufferSize = 0;
|
bufferSize = 0;
|
||||||
|
|
||||||
// 多流输出比图像拆分优先级高,如果多流输出和图像拆分同时开启,应出图数量等于多流输出图像数量的两倍
|
if (!isFold)
|
||||||
if (multioutSpliteImgCount == (multioutImgCount == 0 ? multioutImgCount + spliteImgCount : multioutImgCount * 2))
|
|
||||||
{
|
{
|
||||||
multioutSpliteImgCount = 0;
|
// 多流输出比图像拆分优先级高,如果多流输出和图像拆分同时开启,应出图数量等于多流输出图像数量的两倍
|
||||||
|
if (multioutSpliteImgCount == (multioutImgCount == 0 ? multioutImgCount + spliteImgCount : multioutImgCount * 2))
|
||||||
|
{
|
||||||
|
multioutSpliteImgCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 如果对折模式或单面和多流输出同时开启,多流输出图像数量减半
|
||||||
|
if (multioutSpliteImgCount == (multioutImgCount == 0 ? multioutImgCount + spliteImgCount : multioutImgCount / 2))
|
||||||
|
{
|
||||||
|
multioutSpliteImgCount = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet)
|
if (HGSANE_ERR_IMAGE_DISCARD == doubleImgRet)
|
||||||
|
@ -1531,3 +1546,32 @@ HGResult HGSaneDeviceImpl::GetSpliteImgCount(HGInt *count)
|
||||||
|
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult HGSaneDeviceImpl::GetIsFold(HGBool *isFold)
|
||||||
|
{
|
||||||
|
SANE_Int dev_options = 0;
|
||||||
|
SANE_Int method = 0;
|
||||||
|
HGBool fold = false;
|
||||||
|
|
||||||
|
m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &dev_options, nullptr);
|
||||||
|
for (int i = 1; i < dev_options; ++i)
|
||||||
|
{
|
||||||
|
const SANE_Option_Descriptor* opt = m_sourceImpl->m_saneApi.sane_get_option_descriptor_api(m_devHandle, i);
|
||||||
|
if (strcmp(opt->name, SANE_STD_OPT_NAME_PAGE) == 0)
|
||||||
|
{
|
||||||
|
char *value = (char*)malloc(opt->size * 2 + 4);
|
||||||
|
SANE_Status ret = m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, value, &method);
|
||||||
|
if (ret == SANE_STATUS_GOOD)
|
||||||
|
{
|
||||||
|
if (0 == strcmp(value, OPTION_VALUE_SMYM_DZ) || 0 == strcmp(value, OPTION_VALUE_SMYM_DM))
|
||||||
|
fold = true;
|
||||||
|
|
||||||
|
*isFold = fold;
|
||||||
|
free(value);
|
||||||
|
return HGBASE_ERR_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
|
@ -107,6 +107,7 @@ private:
|
||||||
HGResult GetDoubleImgStatus(HGUInt *status);
|
HGResult GetDoubleImgStatus(HGUInt *status);
|
||||||
HGResult GetMultioutImgCount(HGInt *count);
|
HGResult GetMultioutImgCount(HGInt *count);
|
||||||
HGResult GetSpliteImgCount(HGInt *count);
|
HGResult GetSpliteImgCount(HGInt *count);
|
||||||
|
HGResult GetIsFold(HGBool *isFold);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
HGSaneSourceImpl* m_sourceImpl;
|
HGSaneSourceImpl* m_sourceImpl;
|
||||||
|
|
Loading…
Reference in New Issue