在扫描前获取dpi而不是扫描过程中

This commit is contained in:
luoliangyi 2022-05-20 18:44:24 +08:00
parent 112d13d22e
commit fd0e1f82bd
2 changed files with 35 additions and 22 deletions

View File

@ -47,6 +47,7 @@ MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, m_admin_loggedIn(false)
, m_dpi(200)
, m_currFilePath("")
, m_currIndex(-1)
, m_multiPageCount(0)
@ -728,28 +729,7 @@ void MainWindow::on_sane_dev_error(QString errorInfo)
void MainWindow::on_new_image(void *img)
{
HGImage image = (HGImage)img;
HGUInt dpi = 96;
SANE_Int num_dev_options = 0;
sane_control_option(cur_dev_.handle(), 0, SANE_ACTION_GET_VALUE, &num_dev_options, nullptr);
for (int i = 1; i < num_dev_options; ++i)
{
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(cur_dev_.handle(), i);
if (nullptr == desp)
continue;
if (SANE_TYPE_INT == desp->type)
{
SANE_Int value = 0;
sane_control_option(cur_dev_.handle(), i, SANE_ACTION_GET_VALUE, &value, nullptr);
if (0 == strcmp(desp->title, OPTION_TITLE_FBL))
{
dpi = (HGUInt)value;
}
}
}
HGBase_SetImageDpi(image, dpi, dpi);
HGBase_SetImageDpi(image, m_dpi, m_dpi);
if (1 == m_scanType)
{
@ -962,6 +942,8 @@ void MainWindow::on_continueScan()
startSaveMessageBox(m_dialogLog);
SANE_Status ret;
m_dpi = getDpi();
if (m_singleScan)
ret = sane_io_control(cur_dev_.handle(), IO_CTRL_CODE_TEST_SINGLE, nullptr, nullptr);
else
@ -1064,6 +1046,31 @@ void MainWindow::on_act_last_triggered()
}
}
HGUInt MainWindow::getDpi()
{
HGUInt dpi = 200;
SANE_Int num_dev_options = 0;
sane_control_option(cur_dev_.handle(), 0, SANE_ACTION_GET_VALUE, &num_dev_options, nullptr);
for (int i = 1; i < num_dev_options; ++i)
{
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(cur_dev_.handle(), i);
if (nullptr == desp)
continue;
if (SANE_TYPE_INT == desp->type)
{
SANE_Int value = 0;
sane_control_option(cur_dev_.handle(), i, SANE_ACTION_GET_VALUE, &value, nullptr);
if (0 == strcmp(desp->title, OPTION_TITLE_FBL))
{
dpi = (HGUInt)value;
}
}
}
return dpi;
}
QString MainWindow::getCacheFileName()
{
QString cachePath = Dialog_ClrCache::getCachePath();
@ -2448,6 +2455,7 @@ void MainWindow::on_act_acquire_triggered()
startSaveMessageBox(this);
m_dpi = getDpi();
SANE_Status ret = sane_start(cur_dev_.handle());
if (ret != SANE_STATUS_GOOD)
{
@ -2495,6 +2503,7 @@ void MainWindow::on_act_acquireSingle_triggered()
startSaveMessageBox(this);
m_dpi = getDpi();
SANE_Status ret = sane_io_control(cur_dev_.handle(), IO_CTRL_CODE_TEST_SINGLE, nullptr, nullptr);
if (ret != SANE_STATUS_GOOD)
{
@ -2557,6 +2566,7 @@ void MainWindow::on_act_acquireInto_triggered()
startSaveMessageBox(this);
m_dpi = getDpi();
SANE_Status ret = sane_start(cur_dev_.handle());
if (ret != SANE_STATUS_GOOD)
{
@ -2619,6 +2629,7 @@ void MainWindow::on_act_insertFromScanner_triggered()
startSaveMessageBox(this);
m_dpi = getDpi();
SANE_Status ret = sane_start(cur_dev_.handle());
if (ret != SANE_STATUS_GOOD)
{

View File

@ -205,6 +205,7 @@ protected:
private:
static int sane_ex_callback(SANE_Handle hdev, int code, void *data, unsigned int* len, void *param);
HGUInt getDpi();
QString getCacheFileName();
HGImage createImage();
int getMultiPageCount();
@ -230,6 +231,7 @@ private:
sane_dev cur_dev_;
std::vector<DEVCFG> dev_schemes_;
HGUInt m_dpi;
QString m_currFilePath;
int m_currIndex;
int m_multiPageCount;