From 0af83ed048164a204b47b173038400914fba4cc9 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Wed, 12 Apr 2023 10:30:14 +0800 Subject: [PATCH] =?UTF-8?q?HGSaneUI=EF=BC=9Ashow=5Fdevlist=5Fui=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E6=8E=A5=E5=8F=A3=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E4=BC=A0=E5=85=A5=E5=8F=82=E6=95=B0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=90=8D=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/demo/device_user.cpp | 14 +++++++++++-- app/demo/mainwindow.cpp | 1 + modules/saneui/HGSaneUI.cpp | 5 +++-- modules/saneui/HGSaneUI.h | 3 ++- modules/saneui/dialog_device_scan.cpp | 15 +++----------- modules/saneui/dialog_device_scan.h | 2 -- modules/saneui/dialog_device_select.cpp | 27 ++++++++++++++++++------- modules/saneui/dialog_device_select.h | 2 +- 8 files changed, 42 insertions(+), 27 deletions(-) diff --git a/app/demo/device_user.cpp b/app/demo/device_user.cpp index 04979780..207bf20a 100644 --- a/app/demo/device_user.cpp +++ b/app/demo/device_user.cpp @@ -63,7 +63,12 @@ void HGAPI DeviceUser::DSCloseReqFunc(HGTwainDS ds, HGPointer param) void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param) { DeviceUser* p = (DeviceUser*)param; - emit p->newImage(image); + HGImage image2 = nullptr; + HGBase_CloneImage(image, 0, 0, &image2); + if (nullptr != image2) + { + emit p->newImage(image2); + } } #else @@ -156,7 +161,12 @@ HGResult DeviceUser::StartScan() void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param) { DeviceUser* p = (DeviceUser*)param; - emit p->newImage(image); + HGImage image2 = nullptr; + HGBase_CloneImage(image, 0, 0, &image2); + if (nullptr != image2) + { + emit p->newImage(image2); + } } #endif diff --git a/app/demo/mainwindow.cpp b/app/demo/mainwindow.cpp index 0ac3d438..f1d49353 100644 --- a/app/demo/mainwindow.cpp +++ b/app/demo/mainwindow.cpp @@ -34,6 +34,7 @@ void MainWindow::on_newImage(void *image) char fileName[256]; sprintf(fileName, "D:\\test_%d.jpg", i++); HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName); + HGBase_DestroyImage((HGImage)image); } void MainWindow::on_pushButton_selectDev_clicked() diff --git a/modules/saneui/HGSaneUI.cpp b/modules/saneui/HGSaneUI.cpp index c3651222..de772eb8 100644 --- a/modules/saneui/HGSaneUI.cpp +++ b/modules/saneui/HGSaneUI.cpp @@ -62,7 +62,8 @@ int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow par return 0; } -int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen) +int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWindow parent, + SANE_Handle *handle, char *devName, unsigned int maxLen) { if (nullptr == saneApi || nullptr == handle) return -1; @@ -87,7 +88,7 @@ int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle QCoreApplication::installTranslator(&translator); *handle = nullptr; - Dialog_Device_Select dlg(saneApi, qParent); + Dialog_Device_Select dlg(saneApi, devNames, qParent); if (dlg.exec()) { if (nullptr != devName) diff --git a/modules/saneui/HGSaneUI.h b/modules/saneui/HGSaneUI.h index 215af461..3649a0b9 100644 --- a/modules/saneui/HGSaneUI.h +++ b/modules/saneui/HGSaneUI.h @@ -12,7 +12,8 @@ typedef void (*show_scan_ui_image_callback)(const SANE_Parameters *imageFormat, HGEXPORT int show_srclist_ui(const char **manuNames, const char **sanePaths, HGWindow parent, HGDll *dll, SANEAPI* saneApi, char *manuName, unsigned int maxLen); -HGEXPORT int show_devlist_ui(const SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen); +HGEXPORT int show_devlist_ui(const SANEAPI* saneApi, const char **devNames, HGWindow parent, + SANE_Handle *handle, char *devName, unsigned int maxLen); HGEXPORT int show_setting_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent); HGEXPORT int show_scan_ui(const SANEAPI* saneApi, SANE_Handle handle, const char *devName, HGWindow parent, show_scan_ui_image_callback callback, void *callbackParam); diff --git a/modules/saneui/dialog_device_scan.cpp b/modules/saneui/dialog_device_scan.cpp index f7eba929..eb6c8ba9 100644 --- a/modules/saneui/dialog_device_scan.cpp +++ b/modules/saneui/dialog_device_scan.cpp @@ -26,7 +26,6 @@ Dialog_Device_Scan::Dialog_Device_Scan(const SANEAPI* saneApi, SANE_Handle dev, qRegisterMetaType("SANE_Parameters"); qRegisterMetaType("SANE_Byte *"); connect(this, &Dialog_Device_Scan::eventFunc, this, &Dialog_Device_Scan::on_eventFunc, Qt::QueuedConnection); - connect(this, &Dialog_Device_Scan::newImage, this, &Dialog_Device_Scan::on_newImage, Qt::QueuedConnection); ui->pushButton_Continue->setEnabled(true); ui->pushButton_Cancel->setEnabled(false); @@ -59,13 +58,6 @@ void Dialog_Device_Scan::on_eventFunc(QString errInfo) ui->pushButton_Complete->setEnabled(true); } -void Dialog_Device_Scan::on_newImage(SANE_Parameters format, SANE_Byte *data) -{ - if (NULL != m_callback) - m_callback(&format, data, m_callbackParam); - delete [] data; -} - void Dialog_Device_Scan::on_pushButton_Cancel_clicked() { m_saneAPI.sane_cancel_api(m_saneDev); @@ -105,7 +97,7 @@ void Dialog_Device_Scan::on_pushButton_Continue_clicked() void Dialog_Device_Scan::closeEvent(QCloseEvent *e) { - if (NULL != m_thread) + if (nullptr != m_thread) { QMessageBox::warning(this, tr("Warning"), tr("Scanning in progress, closing not allowed")); e->ignore(); @@ -172,8 +164,7 @@ void HGAPI Dialog_Device_Scan::ThreadFunc(HGThread thread, HGPointer param) break; } - SANE_Byte *data = new HGByte [readSize]; - memcpy(data, p->m_buffer, readSize); - emit p->newImage(params, data); + if (nullptr != p->m_callback) + p->m_callback(¶ms, p->m_buffer, p->m_callbackParam); } } diff --git a/modules/saneui/dialog_device_scan.h b/modules/saneui/dialog_device_scan.h index 6232cccd..e38c0aa8 100644 --- a/modules/saneui/dialog_device_scan.h +++ b/modules/saneui/dialog_device_scan.h @@ -21,11 +21,9 @@ public: signals: void eventFunc(QString errInfo); - void newImage(SANE_Parameters format, SANE_Byte *data); private slots: void on_eventFunc(QString errInfo); - void on_newImage(SANE_Parameters format, SANE_Byte *data); void on_pushButton_Cancel_clicked(); void on_pushButton_Complete_clicked(); void on_pushButton_Continue_clicked(); diff --git a/modules/saneui/dialog_device_select.cpp b/modules/saneui/dialog_device_select.cpp index c587a8d4..ee969e48 100644 --- a/modules/saneui/dialog_device_select.cpp +++ b/modules/saneui/dialog_device_select.cpp @@ -2,7 +2,7 @@ #include "ui_dialog_device_select.h" #include -Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, QWidget *parent) : +Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, const char **devNames, QWidget *parent) : QDialog(parent), ui(new Ui::Dialog_Device_Select) { @@ -15,14 +15,27 @@ Dialog_Device_Select::Dialog_Device_Select(const SANEAPI* saneApi, QWidget *pare setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); - const SANE_Device** device_list; - if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE)) + if (nullptr == devNames) { - const SANE_Device** p; - for (p = device_list; *p != nullptr; ++p) + const SANE_Device** device_list; + if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE)) { - m_vDevName.push_back((*p)->name); - ui->listWidget->addItem((*p)->name); + const SANE_Device** p; + for (p = device_list; *p != nullptr; ++p) + { + m_vDevName.push_back((*p)->name); + ui->listWidget->addItem((*p)->name); + } + } + } + else + { + const char **p = devNames; + while (*p != nullptr) + { + m_vDevName.push_back(*p); + ui->listWidget->addItem(*p); + ++p; } } diff --git a/modules/saneui/dialog_device_select.h b/modules/saneui/dialog_device_select.h index 126c7223..afb20cbc 100644 --- a/modules/saneui/dialog_device_select.h +++ b/modules/saneui/dialog_device_select.h @@ -15,7 +15,7 @@ class Dialog_Device_Select : public QDialog Q_OBJECT public: - Dialog_Device_Select(const SANEAPI* saneApi, QWidget *parent = nullptr); + Dialog_Device_Select(const SANEAPI* saneApi, const char **devNames, QWidget *parent = nullptr); ~Dialog_Device_Select(); SANE_Handle GetDevHandle();