From f14e49bc540f5a6166726706266957dc4d309c48 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Tue, 17 Oct 2023 10:47:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0sane=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E5=8F=8C=E5=BC=A0=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner2/device_user.cpp | 16 +++++++- app/scanner2/device_user.h | 1 + app/scanner2/dialog_abnormalimage.cpp | 39 ++++++++++++++++++ app/scanner2/dialog_abnormalimage.h | 34 ++++++++++++++++ app/scanner2/dialog_abnormalimage.ui | 58 +++++++++++++++++++++++++++ app/scanner2/mainwindow.cpp | 15 +++++++ app/scanner2/mainwindow.h | 1 + build2/qt/HGScanner2/HGScanner2.pro | 3 ++ modules/sane_user/HGSaneImpl.cpp | 2 + 9 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 app/scanner2/dialog_abnormalimage.cpp create mode 100644 app/scanner2/dialog_abnormalimage.h create mode 100644 app/scanner2/dialog_abnormalimage.ui diff --git a/app/scanner2/device_user.cpp b/app/scanner2/device_user.cpp index d6453915..ba0b10df 100644 --- a/app/scanner2/device_user.cpp +++ b/app/scanner2/device_user.cpp @@ -376,7 +376,21 @@ void HGAPI DeviceUser::DeviceEventFunc(HGSaneDevice dev, HGUInt event, HGPointer HGUInt HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGUInt type, HGPointer param) { DeviceUser* p = (DeviceUser*)param; - emit p->newImage(image); + HGUInt result = HGBASE_ERR_OK; + if (HGSANE_IMAGE_TYPE_DOUBLE == type) + { + emit p->abnormalImage(image, &result); + } + + if (HGBASE_ERR_OK == result) + { + emit p->newImage(image); + } + else + { + return HGSANE_ERR_STOPSCAN; + } + return HGBASE_ERR_OK; } diff --git a/app/scanner2/device_user.h b/app/scanner2/device_user.h index 24f17972..9e214752 100644 --- a/app/scanner2/device_user.h +++ b/app/scanner2/device_user.h @@ -124,6 +124,7 @@ private: signals: void newImage(void *image); + void abnormalImage(void *image, HGUInt *result); void scanFinishEvent(); void scanWorkingEvent(); diff --git a/app/scanner2/dialog_abnormalimage.cpp b/app/scanner2/dialog_abnormalimage.cpp new file mode 100644 index 00000000..d7897a84 --- /dev/null +++ b/app/scanner2/dialog_abnormalimage.cpp @@ -0,0 +1,39 @@ +#include "dialog_abnormalimage.h" +#include "ui_dialog_abnormalimage.h" +#include "sane_user/HGSane.h" + +Dialog_AbnormalImage::Dialog_AbnormalImage(HGImage image, QWidget *parent) : + QDialog(parent), + ui(new Ui::Dialog_AbnormalImage) +{ + ui->setupUi(this); + + m_result = HGBASE_ERR_OK; + + m_view = new HGImgView(); + m_view->addImage(image); + ui->stackedWidget->addWidget(m_view); + ui->stackedWidget->setCurrentWidget(m_view); +} + +Dialog_AbnormalImage::~Dialog_AbnormalImage() +{ + delete ui; +} + +HGUInt Dialog_AbnormalImage::getResult() +{ + return m_result; +} + +void Dialog_AbnormalImage::on_pushButton_reserve_clicked() +{ + m_result = HGBASE_ERR_OK; + close(); +} + +void Dialog_AbnormalImage::on_pushButton_discard_clicked() +{ + m_result = HGBASE_ERR_FAIL; + close(); +} diff --git a/app/scanner2/dialog_abnormalimage.h b/app/scanner2/dialog_abnormalimage.h new file mode 100644 index 00000000..734d1e9d --- /dev/null +++ b/app/scanner2/dialog_abnormalimage.h @@ -0,0 +1,34 @@ +#ifndef DIALOG_ABNORMALIMAGE_H +#define DIALOG_ABNORMALIMAGE_H + +#include +#include "base/HGBase.h" +#include "HGImgView.h" + +namespace Ui { +class Dialog_AbnormalImage; +} + +class Dialog_AbnormalImage : public QDialog +{ + Q_OBJECT + +public: + explicit Dialog_AbnormalImage(HGImage image, QWidget *parent = nullptr); + ~Dialog_AbnormalImage(); + + HGUInt getResult(); + +private slots: + void on_pushButton_reserve_clicked(); + + void on_pushButton_discard_clicked(); + +private: + Ui::Dialog_AbnormalImage *ui; + + HGUInt m_result; + HGImgView *m_view; +}; + +#endif // DIALOG_ABNORMALIMAGE_H diff --git a/app/scanner2/dialog_abnormalimage.ui b/app/scanner2/dialog_abnormalimage.ui new file mode 100644 index 00000000..3b32cf11 --- /dev/null +++ b/app/scanner2/dialog_abnormalimage.ui @@ -0,0 +1,58 @@ + + + Dialog_AbnormalImage + + + + 0 + 0 + 820 + 550 + + + + Dialog + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Reserve + + + + + + + Discard + + + + + + + + + + diff --git a/app/scanner2/mainwindow.cpp b/app/scanner2/mainwindow.cpp index 788091e4..989be71d 100644 --- a/app/scanner2/mainwindow.cpp +++ b/app/scanner2/mainwindow.cpp @@ -32,6 +32,7 @@ #include "dialog_feedback.h" #include "dialog_savemessagebox.h" #include "dialog_waitingocr.h" +#include "dialog_abnormalimage.h" #include "base/HGInfo.h" #include "huagao/hgscanner_error.h" #include "base/HGTime.h" @@ -371,6 +372,7 @@ MainWindow::MainWindow(const QString& appLang, QWidget *parent) { m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false); connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection); + connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection); connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection); @@ -427,6 +429,7 @@ MainWindow::~MainWindow() if (nullptr != m_devUser) { disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*))); + disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); delete m_devUser; @@ -1311,6 +1314,15 @@ void MainWindow::on_newImage(void *image) qDebug("on_newImage end, m_currScanCount=%d, seconds=%f", m_currScanCount, seconds); } +void MainWindow::on_abnormalImage(void *image, HGUInt *result) +{ + HGImage img = nullptr; + HGBase_CloneImage((HGImage)image, 0, 0, &img); + Dialog_AbnormalImage dlg(img, this); + dlg.exec(); + *result = dlg.getResult(); +} + void MainWindow::on_scanWorkingEvent() { m_view->enableHighQuality(false); @@ -4220,6 +4232,7 @@ void MainWindow::deleteDevUser() if (nullptr != m_devUser) { disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*))); + disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); m_devUser->Logout(); @@ -4482,6 +4495,7 @@ void MainWindow::on_act_selectDevice_triggered() if (nullptr != m_devUser) { disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*))); + disconnect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*))); disconnect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent())); disconnect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent())); m_devUser->Logout(); @@ -4503,6 +4517,7 @@ void MainWindow::on_act_selectDevice_triggered() m_devUser->Login(); m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false); connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)), Qt::DirectConnection); + connect(m_devUser, SIGNAL(abnormalImage(void*,HGUInt*)), this, SLOT(on_abnormalImage(void*,HGUInt*)), Qt::BlockingQueuedConnection); connect(m_devUser, SIGNAL(scanWorkingEvent()), this, SLOT(on_scanWorkingEvent()), Qt::QueuedConnection); connect(m_devUser, SIGNAL(scanFinishEvent()), this, SLOT(on_scanFinishEvent()), Qt::QueuedConnection); #if !defined(HG_CMP_MSC) diff --git a/app/scanner2/mainwindow.h b/app/scanner2/mainwindow.h index 75b87c6d..4869c4bf 100644 --- a/app/scanner2/mainwindow.h +++ b/app/scanner2/mainwindow.h @@ -121,6 +121,7 @@ private slots: void on_post_new_image(QString fileName); void on_preview_image(); void on_newImage(void *image); + void on_abnormalImage(void *image, HGUInt *result); void on_scanFinishEvent(); void on_scanWorkingEvent(); void on_m_pbtn_push_clicked(); diff --git a/build2/qt/HGScanner2/HGScanner2.pro b/build2/qt/HGScanner2/HGScanner2.pro index 523a65c1..2bc1626f 100644 --- a/build2/qt/HGScanner2/HGScanner2.pro +++ b/build2/qt/HGScanner2/HGScanner2.pro @@ -226,6 +226,7 @@ SOURCES += \ ../../../app/scanner2/dialog_upgrade.cpp \ ../../../app/scanner2/dialog_writesettings.cpp \ ../../../app/scanner2/dialog_waitingocr.cpp \ + ../../../app/scanner2/dialog_abnormalimage.cpp \ ../../../app/scanner2/device_user.cpp \ ../../../app/scanner2/graphicsscene.cpp \ ../../../app/scanner2/main.cpp \ @@ -266,6 +267,7 @@ HEADERS += \ ../../../app/scanner2/dialog_upgrade.h \ ../../../app/scanner2/dialog_writesettings.h \ ../../../app/scanner2/dialog_waitingocr.h \ + ../../../app/scanner2/dialog_abnormalimage.h \ ../../../app/scanner2/device_user.h \ ../../../app/scanner2/graphicsscene.h \ ../../../app/scanner2/mainwindow.h \ @@ -300,6 +302,7 @@ FORMS += \ ../../../app/scanner2/dialog_upgrade.ui \ ../../../app/scanner2/dialog_writesettings.ui \ ../../../app/scanner2/dialog_waitingocr.ui \ + ../../../app/scanner2/dialog_abnormalimage.ui \ ../../../app/scanner2/mainwindow.ui \ ../../../app/scanner2/widget_imgproc_base.ui \ ../../../app/scanner2/widget_statusbar.ui \ diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index f71bb0d7..133d4388 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -1134,6 +1134,8 @@ void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) if (stopScan) { saneAPI.sane_cancel_api(p->m_devHandle); + if (NULL != p->m_scanNotify) + p->m_scanNotify((int)SANE_EVENT_SCAN_FINISHED, NULL, 0); break; }