解决扫描到对话框上保存多页PDF不正确的问题

This commit is contained in:
luoliangyi 2023-05-30 10:06:01 +08:00
parent 6400b4db88
commit 10cb69079f
4 changed files with 14 additions and 89 deletions

View File

@ -1072,6 +1072,7 @@ void MainWindow::on_newImage(void *image)
if (HGBASE_ERR_OK == HGImgFmt_SaveImageToWriter(m_scanImgFmtWriter, (HGImage)image, &saveInfo))
{
++m_aquireIntoMultiPageCount;
if (1 == m_aquireIntoSaveParam.m_multiPagesType && m_aquireIntoMultiPageCount == m_aquireIntoSaveParam.m_customMultiPages)
{
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
@ -1081,10 +1082,6 @@ void MainWindow::on_newImage(void *image)
++m_aquireIntoSaveParam.m_fileNameStartIndex;
m_aquireIntoMultiPageCount = 0;
}
else
{
++m_aquireIntoMultiPageCount;
}
}
}
}
@ -1197,6 +1194,16 @@ void MainWindow::on_scanEvent(HGUInt event)
{
m_isScanning = false;
updateActionStatus();
if (nullptr != m_scanImgFmtWriter)
{
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
m_scanImgFmtWriter = nullptr;
emit post_new_image(m_scanFileName);
m_scanFileName.clear();
++m_aquireIntoSaveParam.m_fileNameStartIndex;
m_aquireIntoMultiPageCount = 0;
}
}
}
#if 0

View File

@ -215,48 +215,7 @@ public:
}
static SANE_Status get_default_value(const SANEAPI* saneApi, SANE_Handle h, int i, void* def)
{
const SANE_Option_Descriptor* opt = saneApi->sane_get_option_descriptor_api(h, i);
if(!opt)
{
return SANE_STATUS_INVAL;
}
if(opt->type == SANE_TYPE_BOOL)
{
SANE_Bool v = SANE_TRUE;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else if (opt->type == SANE_TYPE_INT)
{
SANE_Int v = 0;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else if(opt->type == SANE_TYPE_FIXED)
{
SANE_Fixed v = 0;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else
{
char *buf = new char[opt->size + 4];
memset(buf, 0, opt->size + 4);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, buf, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, buf, NULL);
delete[] buf;
}
return SANE_STATUS_GOOD;
return saneApi->sane_control_option_api(h, i, (SANE_Action)100, def, NULL);
}
static SANE_Status set_custom_gamma(const SANEAPI* saneApi, SANE_Handle h, SANE_Gamma *gamma)
{

View File

@ -215,48 +215,7 @@ public:
}
static SANE_Status get_default_value(const SANEAPI* saneApi, SANE_Handle h, int i, void* def)
{
const SANE_Option_Descriptor* opt = saneApi->sane_get_option_descriptor_api(h, i);
if(!opt || opt->type == SANE_TYPE_BUTTON || opt->type == SANE_TYPE_GROUP)
{
return SANE_STATUS_INVAL;
}
if(opt->type == SANE_TYPE_BOOL)
{
SANE_Bool v = SANE_TRUE;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else if (opt->type == SANE_TYPE_INT)
{
SANE_Int v = 0;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else if(opt->type == SANE_TYPE_FIXED)
{
SANE_Fixed v = 0;
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, &v, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, &v, NULL);
}
else
{
char *buf = new char[opt->size + 4];
memset(buf, 0, opt->size + 4);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, buf, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_AUTO, NULL, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_GET_VALUE, def, NULL);
saneApi->sane_control_option_api(h, i, SANE_ACTION_SET_VALUE, buf, NULL);
delete[] buf;
}
return SANE_STATUS_GOOD;
return saneApi->sane_control_option_api(h, i, (SANE_Action)100, def, NULL);
}
static SANE_Status set_custom_gamma(const SANEAPI* saneApi, SANE_Handle h, SANE_Gamma *gamma)
{

View File

@ -122,7 +122,7 @@ void Dialog_progress_ui::on_image_recived()
void Dialog_progress_ui::on_image_uploaded()
{
ui->lineEdit_imgUploaded->setText(QString::number(imageUploadedCount++));
ui->lineEdit_imgUploaded->setText(QString::number(++imageUploadedCount));
}
void Dialog_progress_ui::FuncNotify(int event, void *msg, int flag)