diff --git a/app/scanner/mainwindow.cpp b/app/scanner/mainwindow.cpp index ce3eea81..c3596593 100644 --- a/app/scanner/mainwindow.cpp +++ b/app/scanner/mainwindow.cpp @@ -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) { diff --git a/app/scanner/mainwindow.h b/app/scanner/mainwindow.h index d7fdd8f9..b9d71b30 100644 --- a/app/scanner/mainwindow.h +++ b/app/scanner/mainwindow.h @@ -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 dev_schemes_; + HGUInt m_dpi; QString m_currFilePath; int m_currIndex; int m_multiPageCount;