This commit is contained in:
13038267101 2023-11-21 15:21:33 +08:00
commit 5331625acf
33 changed files with 977 additions and 718 deletions

View File

@ -694,9 +694,11 @@ void MainWindow::on_btnOpenFilePath_clicked()
HGBase_GetFileName(filePath.toStdString().c_str(), fileName, 256);
HGChar fileVersion[256] = {0};
HGBase_GetFilePrefix(fileName, fileVersion, 256);
if (devType == GetDevType(fileVersion, NULL))
//if (devType == GetDevType(fileVersion, NULL))
if (1)
{
if (m_curFwVersion >= fileVersion)
//if (m_curFwVersion >= fileVersion)
if (0)
{
QMessageBox msg(QMessageBox::Information, tr("tips"), tr("the selected firmware is not newer than the current version"), QMessageBox::Ok, this);
msg.exec();

View File

@ -1,4 +1,4 @@
#include "dialog_exportimagefile.h"
#include "dialog_exportimagefile.h"
#include "ui_dialog_exportimagefile.h"
#include "mainwindow.h"
#include "base/HGInfo.h"
@ -29,9 +29,24 @@ Dialog_ExportImageFile::Dialog_ExportImageFile(const QString &destPath, const QS
, m_srcFiles(srcFiles)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
int totalCount = 0;
for (int i = 0; i < m_srcFiles.size(); ++i)
{
HGImgFmtReader imgFmtReader = nullptr;
HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (NULL != imgFmtReader)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
totalCount += count;
HGImgFmt_CloseImageReader(imgFmtReader);
}
}
ui->progressBar->setMinimum(0);
ui->progressBar->setMaximum(srcFiles.size());
ui->progressBar->setMaximum(totalCount);
ui->progressBar->setValue(0);
connect(this, SIGNAL(updateProgress(int)), this, SLOT(on_updateProgress(int)), Qt::QueuedConnection);
@ -56,290 +71,29 @@ void HGAPI Dialog_ExportImageFile::ThreadFunc(HGThread thread, HGPointer param)
{
(void)thread;
Dialog_ExportImageFile *p = (Dialog_ExportImageFile *)param;
HGResult ret = HGBASE_ERR_FAIL;
HGResult ret = HGBASE_ERR_FAIL;
if (p->m_isSaveAsMulti)
{
QString fileName = p->m_destPath + p->m_destName + p->m_destExt;
if (p->m_isOcr)
{
#if 0
HGChar tmpFileName[256];
HGBase_GetTmpFileName("tif", tmpFileName, 256);
HGImgFmtWriter writer = NULL;
HGImgFmt_OpenImageWriter(tmpFileName, 0, &writer);
for (int i = 0; i < p->m_srcFiles.size(); ++i)
{
if (p->m_stopThread)
{
break;
}
emit p->updateProgress(i);
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK == ret)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (p->m_stopThread)
{
break;
}
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK == ret)
{
ret = HGImgFmt_SaveImageToWriter(writer, img, NULL);
HGBase_DestroyImage(img);
}
if (ret != HGBASE_ERR_OK)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
}
if (ret != HGBASE_ERR_OK)
break;
}
HGImgFmt_CloseImageWriter(writer);
bool result = createOcrPdf(tmpFileName, getStdString(fileName).c_str(), m_ocrLanguageType);
QFile::remove(tmpFileName);
if (!result)
{
ret = HGIMGPROC_ERR_OCR;
}
#else
HGOCRMgr ocrMgr = nullptr;
ret = HGImgProc_CreateOCRMgr(0, &ocrMgr);
if (HGBASE_ERR_OK == ret)
{
for (int i = 0; i < p->m_srcFiles.size(); ++i)
{
if (p->m_stopThread)
{
break;
}
emit p->updateProgress(i);
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK == ret)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (p->m_stopThread)
{
break;
}
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK == ret)
{
ret = HGImgProc_AddToImageOCRList(ocrMgr, img);
HGBase_DestroyImage(img);
}
if (ret != HGBASE_ERR_OK)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
}
if (ret != HGBASE_ERR_OK)
break;
}
if (ret == HGBASE_ERR_OK)
{
ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL);
}
HGImgProc_DestroyOCRMgr(ocrMgr);
}
#endif
ret = p->processMultiFileOcr();
}
else
{
if (p->m_destExt == ".gif")
{
ret = p->processGif(fileName);
ret = p->processMultiFileGif();
}
else
{
HGImgFmtWriter imgFmtWriter = nullptr;
ret = HGImgFmt_OpenImageWriter(getStdString(fileName).c_str(), 0, &imgFmtWriter);
if (HGBASE_ERR_OK == ret)
{
for (int i = 0; i < p->m_srcFiles.size(); ++i)
{
if (p->m_stopThread)
{
break;
}
emit p->updateProgress(i);
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK == ret)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (p->m_stopThread)
{
break;
}
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK == ret)
{
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)p->m_jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)p->m_tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == p->m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == p->m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == p->m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == p->m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
ret = HGImgFmt_SaveImageToWriter(imgFmtWriter, img, &saveInfo);
HGBase_DestroyImage(img);
}
if (ret != HGBASE_ERR_OK)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
}
if (ret != HGBASE_ERR_OK)
break;
}
HGImgFmt_CloseImageWriter(imgFmtWriter);
}
ret = p->processMultiFile();
}
}
}
else
{
int index = 1;
for (int i = 0; i < p->m_srcFiles.size(); ++i)
{
if (p->m_stopThread)
{
break;
}
emit p->updateProgress(i);
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(p->m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK == ret)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (p->m_stopThread)
{
break;
}
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK == ret)
{
char fileName[512];
if(p->m_srcFiles.size() > 1)
{
sprintf(fileName, "%s%03d", getStdString(p->m_destName).c_str(), index);
}else
sprintf(fileName, "%s", getStdString(p->m_destName).c_str());
++index;
QString saveFileName = p->m_destPath + QString(StdStringToUtf8(fileName).c_str()) + p->m_destExt;
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)p->m_jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)p->m_tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == p->m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == p->m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == p->m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == p->m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
ret = MainWindow::saveImage(img, &saveInfo, p->m_isOcr, getStdString(saveFileName).c_str());
HGBase_DestroyImage(img);
}
if (ret != HGBASE_ERR_OK)
break;
}
HGImgFmt_CloseImageReader(imgFmtReader);
}
if (ret != HGBASE_ERR_OK)
break;
}
ret = p->processSingleFile();
}
emit p->finish((int)ret);
@ -365,7 +119,78 @@ void Dialog_ExportImageFile::on_pushButton_clicked()
m_thread = nullptr;
}
HGResult Dialog_ExportImageFile::processGif(const QString &fileName)
HGResult Dialog_ExportImageFile::processMultiFileOcr()
{
int handleCount = 0;
QString fileName = m_destPath + m_destName + m_destExt;
HGOCRMgr ocrMgr = nullptr;
HGResult ret = HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr);
if (HGBASE_ERR_OK != ret)
{
return ret;
}
for (int i = 0; i < m_srcFiles.size(); ++i)
{
if (m_stopThread)
{
break;
}
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (m_stopThread)
{
break;
}
emit updateProgress(handleCount);
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK != ret)
{
break;
}
ret = HGImgProc_AddToImageOCRList(ocrMgr, img);
HGBase_DestroyImage(img);
++handleCount;
emit updateProgress(handleCount);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
if (HGBASE_ERR_OK == ret)
{
ret = HGImgProc_ImageListOCRToFile(ocrMgr, 0, getStdString(fileName).c_str(), NULL, NULL);
}
HGImgProc_DestroyOCRMgr(ocrMgr);
return ret;
}
HGResult Dialog_ExportImageFile::processMultiFileGif()
{
HGUInt maxWidth = 0;
HGUInt maxHeight = 0;
@ -391,12 +216,16 @@ HGResult Dialog_ExportImageFile::processGif(const QString &fileName)
}
}
HGGifSaveInfo gifSaveInfo = {maxWidth, maxHeight};
int handleCount = 0;
QString fileName = m_destPath + m_destName + m_destExt;
HGGifSaveInfo gifSaveInfo = {maxWidth, maxHeight};
HGGifWriter gifWriter = NULL;
HGResult ret = HGImgFmt_OpenGifWriter(getStdString(fileName).c_str(), &gifSaveInfo, &gifWriter);
if (ret != HGBASE_ERR_OK)
if (HGBASE_ERR_OK != ret)
{
return ret;
}
for (int i = 0; i < m_srcFiles.size(); ++i)
{
@ -405,47 +234,233 @@ HGResult Dialog_ExportImageFile::processGif(const QString &fileName)
break;
}
emit updateProgress(i);
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK == ret)
if (HGBASE_ERR_OK != ret)
{
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (m_stopThread)
{
break;
}
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK == ret)
{
ret = HGImgFmt_SaveImageToGifWriter(gifWriter, 200, HG_MAKECOLOR(255, 255, 255, 255), img);
HGBase_DestroyImage(img);
}
if (ret != HGBASE_ERR_OK)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
break;
}
if (ret != HGBASE_ERR_OK)
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (m_stopThread)
{
break;
}
emit updateProgress(handleCount);
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK != ret)
{
break;
}
ret = HGImgFmt_SaveImageToGifWriter(gifWriter, 200, HG_MAKECOLOR(255, 255, 255, 255), img);
HGBase_DestroyImage(img);
++handleCount;
emit updateProgress(handleCount);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseGifWriter(gifWriter);
return ret;
}
HGResult Dialog_ExportImageFile::processMultiFile()
{
int handleCount = 0;
QString fileName = m_destPath + m_destName + m_destExt;
HGImgFmtWriter imgFmtWriter = nullptr;
HGResult ret = HGImgFmt_OpenImageWriter(getStdString(fileName).c_str(), 0, &imgFmtWriter);
if (HGBASE_ERR_OK != ret)
{
return ret;
}
for (int i = 0; i < m_srcFiles.size(); ++i)
{
if (m_stopThread)
{
break;
}
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (m_stopThread)
{
break;
}
emit updateProgress(handleCount);
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK != ret)
{
break;
}
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
ret = HGImgFmt_SaveImageToWriter(imgFmtWriter, img, &saveInfo);
HGBase_DestroyImage(img);
++handleCount;
emit updateProgress(handleCount);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseImageWriter(imgFmtWriter);
return ret;
}
HGResult Dialog_ExportImageFile::processSingleFile()
{
int handleCount = 0;
HGResult ret = HGBASE_ERR_OK;
for (int i = 0; i < m_srcFiles.size(); ++i)
{
if (m_stopThread)
{
break;
}
HGImgFmtReader imgFmtReader = nullptr;
ret = HGImgFmt_OpenImageReader(getStdString(m_srcFiles[i]).c_str(), 0, &imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
HGUInt count = 0;
HGImgFmt_GetImagePageCount(imgFmtReader, &count);
for (HGUInt j = 0; j < count; ++j)
{
if (m_stopThread)
{
break;
}
emit updateProgress(handleCount);
HGImage img = nullptr;
ret = HGImgFmt_LoadImageFromReader(imgFmtReader, j, nullptr, 0, HGBASE_IMGORIGIN_TOP, &img);
if (HGBASE_ERR_OK != ret)
{
break;
}
QString fileName;
if(m_srcFiles.size() > 1 || count > 1)
{
char str[256];
sprintf(str, "%s%03d", getStdString(m_destName).c_str(), handleCount + 1);
fileName = m_destPath + QString(StdStringToUtf8(str).c_str()) + m_destExt;
}
else
{
fileName = m_destPath + m_destName + m_destExt;
}
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = (HGUInt)m_jpegQuality;
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
saveInfo.tiffJpegQuality = (HGUInt)m_tiffQuality;
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
if (HGBASE_IMGTYPE_BINARY == imgInfo.type)
{
if (1 == m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_tiffCompressionBW)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
}
else
{
if (1 == m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (2 == m_tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
}
ret = MainWindow::saveImage(img, &saveInfo, m_isOcr, getStdString(fileName).c_str());
HGBase_DestroyImage(img);
++handleCount;
emit updateProgress(handleCount);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
HGImgFmt_CloseImageReader(imgFmtReader);
if (HGBASE_ERR_OK != ret)
{
break;
}
}
return ret;
}
void Dialog_ExportImageFile::closeEvent(QCloseEvent *e)
{
(void)e;

View File

@ -31,7 +31,10 @@ private slots:
void on_pushButton_clicked();
private:
HGResult processGif(const QString &fileName);
HGResult processMultiFileOcr();
HGResult processMultiFileGif();
HGResult processMultiFile();
HGResult processSingleFile();
protected:
virtual void closeEvent(QCloseEvent *e);
@ -50,7 +53,7 @@ private:
bool m_isOcr;
QStringList m_srcFiles;
bool m_stopThread;
volatile bool m_stopThread;
HGThread m_thread;
};

View File

@ -13,6 +13,7 @@ Dialog_MultiRotateImageFile::Dialog_MultiRotateImageFile(const QStringList &file
m_rotateType(rotateType)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
ui->progressBar->setMinimum(0);
ui->progressBar->setMaximum(fileList.size());

View File

@ -7,6 +7,7 @@ Dialog_WriteSettings::Dialog_WriteSettings(int suffix_type, QWidget *parent) :
ui(new Ui::Dialog_WriteSettings)
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
//set visible
bool jpg_enable = (suffix_type == 0 || suffix_type == 7 || suffix_type == 8);
bool tif_enable = (suffix_type == 6);

View File

@ -1,4 +1,4 @@
#include "mainwindow.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDockWidget>
#include <QFileDialog>

View File

@ -1,4 +1,4 @@
#ifndef MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
@ -52,6 +52,26 @@ enum askIfClear
notClearAndScan
};
typedef struct _save_opt
{
QString path;
int index;
int jpegQuality;
int tiffCompressionBW;
int tiffCompression;
int tiffQuality;
bool isOcr;
}SAVEOPT;
enum ScanType
{
ScanType_None,
ScanType_ScanToCache,
ScanType_SingleScanToCache,
ScanType_ScanInto,
ScanType_InsertScanInto
};
class MainWindow : public QMainWindow
{
Q_OBJECT
@ -63,6 +83,8 @@ public:
void exitFullScreen();
static HGResult saveImage(HGImage image, const HGImgFmtSaveInfo* info, bool ocr, const HGChar *fileName);
static QString getLogInfo(HGResult ret);
private:
static void HGAPI ocrThreadFunc(HGThread thread, HGPointer param);
static void HGAPI ocrMsgPumpFunc(HGMsgPump msgPump, const HGMsg* msg, HGPointer param);
@ -280,41 +302,14 @@ private:
bool auto_save_changes_;
bool save_from_changed_;
typedef struct _save_opt
{
QString path;
int index;
int jpegQuality;
int tiffCompressionBW;
int tiffCompression;
int tiffQuality;
bool isOcr;
}SAVEOPT;
SAVEOPT auto_save_info_;
union VIDPID
{
struct
{
unsigned short VID;
unsigned short PID;
};
unsigned int Value;
};
SAVEOPT auto_save_info_;
QString m_currFilePath;
int m_currIndex;
int m_multiPageCount;
int m_multiIndex;
bool m_modify; // m_view上面的图像是否改变
enum ScanType
{
ScanType_None,
ScanType_ScanToCache,
ScanType_SingleScanToCache,
ScanType_ScanInto,
ScanType_InsertScanInto
};
ScanType m_scanType; // 1-扫描到缓存目录2-单张扫描到缓存目录3-扫描到指定目录4-插入扫描到指定目录
int m_scanInsertPos; // 扫描插入位置,-1表示插入到最后
int m_scanCurIndex;

View File

@ -9,6 +9,8 @@ HGLib_GetImageInfo
HGLib_GetImageDpi
HGLib_SaveImage
HGLib_ReleaseImage
HGLib_GetOcrText
HGLib_ReleaseOcrText
HGLib_InitDevice
HGLib_DeinitDevice
HGLib_GetDeviceNameList

View File

@ -69,10 +69,12 @@ HGResult HGAPI HGBase_WriteConsole(HGConsole console, const HGChar* info)
#if defined(HG_CMP_MSC)
DWORD dwNumberOfCharsWritten;
WriteConsoleA(consoleImpl->m_hConsole, info, (DWORD)strlen(info), &dwNumberOfCharsWritten, NULL);
WriteConsoleA(consoleImpl->m_hConsole, "\r\n", (DWORD)strlen("\r\n"), &dwNumberOfCharsWritten, NULL);
if (info[strlen(info) - 1] != '\n')
WriteConsoleA(consoleImpl->m_hConsole, "\r\n", (DWORD)strlen("\r\n"), &dwNumberOfCharsWritten, NULL);
#else
printf(info);
printf("\n");
if (info[strlen(info) - 1] != '\n')
printf("\n");
#endif
return HGBASE_ERR_OK;
}
}

View File

@ -83,7 +83,8 @@ HGResult HGAPI HGBase_WriteLog(HGLog log, const HGChar* info)
fseeko64(logImpl->m_file, 0, SEEK_END);
#endif
fwrite(info, 1, strlen(info), logImpl->m_file);
fwrite("\n", 1, strlen("\n"), logImpl->m_file);
if (info[strlen(info) - 1] != '\n')
fwrite("\n", 1, strlen("\n"), logImpl->m_file);
fflush(logImpl->m_file);
return HGBASE_ERR_OK;
}
}

View File

@ -109,14 +109,12 @@ HGResult HGOCRHanvon::ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet)
int len = 0;
int rc = HWOCR_RecognizeFile2Str((unsigned char*)tmpFileName, m_ocrHandle, &rst, &len);
HGBase_DeleteFile(tmpFileName);
if (0 != rc)
if (0 != rc || NULL == rst)
{
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageOCR: HWOCR_RecognizeFile2Str fail in=%s", tmpFileName);
return HGIMGPROC_ERR_OCR;
}
assert(NULL != rst && len > 0);
std::vector<std::string> blockInfo;
blockInfo.push_back(rst);
HWOCR_FreeStrRst(&rst);

View File

@ -6,6 +6,7 @@
#include "lang/app_language.h"
#include <locale.h>
#include <QMetaType>
#include "base/HGInfo.h"
Q_DECLARE_METATYPE(HGImage)
@ -22,17 +23,17 @@ Manager::Manager()
qRegisterMetaType<HGImage>("HGImage");
connect(this, SIGNAL(init()), this, SLOT(on_init()));
connect(this, SIGNAL(createDeviceSelect(unsigned int)), this, SLOT(on_createDeviceSelect(unsigned int)));
connect(this, SIGNAL(createSettingUi(unsigned int)), this, SLOT(on_createSettingUi(unsigned int)));
connect(this, SIGNAL(createProgressUi(unsigned int)), this, SLOT(on_createProgressUi(unsigned int)));
connect(this, SIGNAL(createMessageBoxUi(unsigned int)), this, SLOT(on_createMessageBoxUi(unsigned int)));
connect(this, SIGNAL(createTwainSrcUi(unsigned int)), this, SLOT(on_createTwainSrcUi(unsigned int)));
connect(this, SIGNAL(createSaneSrcUi(unsigned int)), this, SLOT(on_createSaneSrcUi(unsigned int)));
connect(this, SIGNAL(createAbnormalImgUi(unsigned int, HGImage)), this, SLOT(on_createAbnormalImgUi(unsigned int, HGImage)));
connect(this, SIGNAL(createDeviceSelect(void *)), this, SLOT(on_createDeviceSelect(void *)));
connect(this, SIGNAL(createSettingUi(void *)), this, SLOT(on_createSettingUi(void *)));
connect(this, SIGNAL(createProgressUi(void *)), this, SLOT(on_createProgressUi(void *)));
connect(this, SIGNAL(createMessageBoxUi(void *)), this, SLOT(on_createMessageBoxUi(void *)));
connect(this, SIGNAL(createTwainSrcUi(void *)), this, SLOT(on_createTwainSrcUi(void *)));
connect(this, SIGNAL(createSaneSrcUi(void *)), this, SLOT(on_createSaneSrcUi(void *)));
connect(this, SIGNAL(createAbnormalImgUi(void *, HGImage)), this, SLOT(on_createAbnormalImgUi(void *, HGImage)));
connect(this, SIGNAL(deleteSettingUi(unsigned int)), this, SLOT(on_deleteSettingUi(unsigned int)));
connect(this, SIGNAL(deleteProgressUi(unsigned int)), this, SLOT(on_deleteProgressUi(unsigned int)));
connect(this, SIGNAL(deleteMessageBoxUi(unsigned int)), this, SLOT(on_deleteMessageBoxUi(unsigned int)));
connect(this, SIGNAL(deleteSettingUi(void *)), this, SLOT(on_deleteSettingUi(void *)));
connect(this, SIGNAL(deleteProgressUi(void *)), this, SLOT(on_deleteProgressUi(void *)));
connect(this, SIGNAL(deleteMessageBoxUi(void *)), this, SLOT(on_deleteMessageBoxUi(void *)));
emit init();
}
@ -49,22 +50,21 @@ int Manager::showDeviceSelect(const std::vector<DEVQUEUI>& devs)
// param
m_DeviceSelectDevs = devs;
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
{
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
emit createDeviceSelect(ThreadId);
emit createDeviceSelect(hStopEvent);
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hStopEvent)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
@ -83,27 +83,16 @@ int Manager::showSettingUi(SANE_Handle device, HWND parent, LPSANEAPI api, const
m_with_scan = with_scan;
m_settingUiCallback = callback;
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
#endif
emit createSettingUi(ThreadId);
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
*/
emit createSettingUi(hStopEvent);
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showSettingUi] emit createSettingUi(ThreadId)");
return 0;
}
@ -114,27 +103,26 @@ int Manager::showProgressUi(HWND parent, std::function<void (ui_result)> callbac
m_progressUiCallback = callback;
m_notify = notify;
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
#endif
emit createProgressUi(ThreadId);
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
*/
emit createProgressUi(hStopEvent);
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showProgressUi] emit createProgressUi(ThreadId)");
#ifdef HG_CMP_MSC
if (nullptr != hStopEvent)
{
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::showProgressUi] Exit Message Loop");
return 0;
}
@ -146,22 +134,21 @@ int Manager::showMessageBoxUi(HWND parent, int event, void *msg, int flag)
m_message = (char*)msg;
m_flag = flag;
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
{
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
emit createMessageBoxUi(ThreadId);
emit createMessageBoxUi(hStopEvent);
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hStopEvent)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
@ -179,22 +166,21 @@ int Manager::showTwainSrcUi(const TW_IDENTITY *vds, HGUInt count, const char* de
m_defDsName = defDevName;
memset(&m_ds, 0, sizeof(TW_IDENTITY));
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
{
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
emit createTwainSrcUi(ThreadId);
emit createTwainSrcUi(hStopEvent);
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hStopEvent)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
@ -225,22 +211,21 @@ int Manager::showSaneSrcUi(const char **manuNames, const char **sanePaths, HGWin
memset(&m_saneApi, 0, sizeof(SANEAPI));
m_saneManuName.clear();
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
{
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
emit createSaneSrcUi(ThreadId);
emit createSaneSrcUi(hStopEvent);
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hStopEvent)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
@ -273,22 +258,21 @@ int Manager::showAbnormalImgUi(SANE_Image *img)
HGImage image = NULL;
HGBase_CreateImageWithData(img->data, &imgInfo, &image);
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
{
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
emit createAbnormalImgUi(ThreadId, image);
emit createAbnormalImgUi(hStopEvent, image);
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hStopEvent)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
msgLoop(hStopEvent);
CloseHandle(hStopEvent);
}
#endif
@ -299,74 +283,41 @@ int Manager::showAbnormalImgUi(SANE_Image *img)
void Manager::closeSettingUi()
{
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
#endif
emit deleteSettingUi(ThreadId);
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
*/
emit deleteSettingUi(hStopEvent);
}
void Manager::closeProgressUi()
{
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
#endif
emit deleteProgressUi(ThreadId);
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
*/
emit deleteProgressUi(hStopEvent);
}
void Manager::closeMessageBoxUi()
{
unsigned int ThreadId = 0;
void *hStopEvent = nullptr;
#ifdef HG_CMP_MSC
if (qApp->thread() != QThread::currentThread())
ThreadId = GetCurrentThreadId();
#endif
emit deleteMessageBoxUi(ThreadId);
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
hStopEvent = ::CreateEvent(0, FALSE, FALSE, 0);
}
#endif
*/
emit deleteMessageBoxUi(hStopEvent);
}
void Manager::clear_functions(void)
@ -380,6 +331,38 @@ void Manager::clear_functions(void)
m_settingUi->clear_callback();
}
void Manager::msgLoop(void *hEvent)
{
#ifdef HG_CMP_MSC
assert(nullptr != hEvent);
while (1)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
HANDLE arEvents[1] = { hEvent };
DWORD result = MsgWaitForMultipleObjectsEx(1, arEvents, INFINITE, QS_ALLINPUT, MWMO_ALERTABLE);
if (result == WAIT_OBJECT_0 + 1) // msg received
{
continue;
}
else if (result == WAIT_OBJECT_0)
{
break;
}
else if (result == WAIT_IO_COMPLETION)
{
break;
}
}
#endif
}
void Manager::on_init()
{
m_langCode = lang_get_cur_code_page();
@ -398,21 +381,21 @@ void Manager::on_init()
QCoreApplication::installTranslator(&m_translator_qt);
}
void Manager::on_createDeviceSelect(unsigned int ThreadId)
void Manager::on_createDeviceSelect(void *hEvent)
{
Dialog_device_select dlg(m_DeviceSelectDevs);
dlg.exec();
m_DeviceSelectResult = dlg.getDevId();
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
}
void Manager::on_createSettingUi(unsigned int ThreadId)
void Manager::on_createSettingUi(void *hEvent)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -439,17 +422,10 @@ void Manager::on_createSettingUi(unsigned int ThreadId)
m_settingUi->setModal(true);
m_settingUi->show();
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
}
#endif
*/
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createSettingUi] m_settingUi->show()");
}
void Manager::on_createProgressUi(unsigned int ThreadId)
void Manager::on_createProgressUi(void *hEvent)
{
if (nullptr != m_settingUi)
m_progressUiparent = (HGWindow)m_settingUi->winId();
@ -480,18 +456,17 @@ void Manager::on_createProgressUi(unsigned int ThreadId)
m_progressUi = new Dialog_progress_ui(this, close_prog, m_notify, qParent);
m_progressUi->setModal(true);
m_progressUi->show();
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "[Manager::on_createProgressUi] m_progressUi->show()");
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
*/
}
void Manager::on_createMessageBoxUi(unsigned int ThreadId)
void Manager::on_createMessageBoxUi(void *hEvent)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -510,14 +485,14 @@ void Manager::on_createMessageBoxUi(unsigned int ThreadId)
dlg.exec();
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
}
void Manager::on_createTwainSrcUi(unsigned int ThreadId)
void Manager::on_createTwainSrcUi(void *hEvent)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -538,14 +513,14 @@ void Manager::on_createTwainSrcUi(unsigned int ThreadId)
}
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
}
void Manager::on_createSaneSrcUi(unsigned int ThreadId)
void Manager::on_createSaneSrcUi(void *hEvent)
{
QWidget *qParent = nullptr;
#ifdef HG_CMP_MSC
@ -568,28 +543,28 @@ void Manager::on_createSaneSrcUi(unsigned int ThreadId)
}
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
}
void Manager::on_createAbnormalImgUi(unsigned int ThreadId, HGImage image)
void Manager::on_createAbnormalImgUi(void *hEvent, HGImage image)
{
Dialog_abnormal_img_select dlg(image, m_progressUi);
dlg.exec();
m_abnormalImgResult = dlg.getUserSelect();
#ifdef HG_CMP_MSC
if (0 != ThreadId)
if (nullptr != hEvent)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
SetEvent((HANDLE)hEvent);
}
#endif
}
void Manager::on_deleteSettingUi(unsigned int ThreadId)
void Manager::on_deleteSettingUi(void *hEvent)
{
if (m_settingUi != nullptr)
{
@ -597,18 +572,9 @@ void Manager::on_deleteSettingUi(unsigned int ThreadId)
delete m_settingUi;
m_settingUi = nullptr;
}
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
}
#endif
*/
}
void Manager::on_deleteProgressUi(unsigned int ThreadId)
void Manager::on_deleteProgressUi(void *hEvent)
{
if (m_progressUi != nullptr)
{
@ -616,25 +582,9 @@ void Manager::on_deleteProgressUi(unsigned int ThreadId)
delete m_progressUi;
m_progressUi = nullptr;
}
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
}
#endif
*/
}
void Manager::on_deleteMessageBoxUi(unsigned int ThreadId)
void Manager::on_deleteMessageBoxUi(void *hEvent)
{
/*
#ifdef HG_CMP_MSC
if (0 != ThreadId)
{
::PostThreadMessage(ThreadId, WM_QUIT, 0, 0);
}
#endif
*/
}

View File

@ -32,33 +32,36 @@ public:
void clear_functions(void);
private:
void msgLoop(void *hEvent);
signals:
void init();
void createDeviceSelect(unsigned int ThreadId);
void createSettingUi(unsigned int ThreadId);
void createProgressUi(unsigned int ThreadId);
void createMessageBoxUi(unsigned int ThreadId);
void createTwainSrcUi(unsigned int ThreadId);
void createSaneSrcUi(unsigned int ThreadId);
void createAbnormalImgUi(unsigned int ThreadId, HGImage image);
void createDeviceSelect(void *hEvent);
void createSettingUi(void *hEvent);
void createProgressUi(void *hEvent);
void createMessageBoxUi(void *hEvent);
void createTwainSrcUi(void *hEvent);
void createSaneSrcUi(void *hEvent);
void createAbnormalImgUi(void *hEvent, HGImage image);
void deleteSettingUi(unsigned int ThreadId);
void deleteProgressUi(unsigned int ThreadId);
void deleteMessageBoxUi(unsigned int ThreadId);
void deleteSettingUi(void *hEvent);
void deleteProgressUi(void *hEvent);
void deleteMessageBoxUi(void *hEvent);
private slots:
void on_init();
void on_createDeviceSelect(unsigned int ThreadId);
void on_createSettingUi(unsigned int ThreadId);
void on_createProgressUi(unsigned int ThreadId);
void on_createMessageBoxUi(unsigned int ThreadId);
void on_createTwainSrcUi(unsigned int ThreadId);
void on_createSaneSrcUi(unsigned int ThreadId);
void on_createAbnormalImgUi(unsigned int ThreadId, HGImage image);
void on_createDeviceSelect(void *hEvent);
void on_createSettingUi(void *hEvent);
void on_createProgressUi(void *hEvent);
void on_createMessageBoxUi(void *hEvent);
void on_createTwainSrcUi(void *hEvent);
void on_createSaneSrcUi(void *hEvent);
void on_createAbnormalImgUi(void *hEvent, HGImage image);
void on_deleteSettingUi(unsigned int ThreadId);
void on_deleteProgressUi(unsigned int ThreadId);
void on_deleteMessageBoxUi(unsigned int ThreadId);
void on_deleteSettingUi(void *hEvent);
void on_deleteProgressUi(void *hEvent);
void on_deleteMessageBoxUi(void *hEvent);
public:
QTranslator m_translator;

View File

@ -9,6 +9,8 @@ Dialog_Input::Dialog_Input(QWidget *parent) :
{
ui->setupUi(this);
setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint);
ui->lineEdit->setMaxLength(50);
}
Dialog_Input::~Dialog_Input()

View File

@ -15,6 +15,7 @@ Dialog_progress_ui::Dialog_progress_ui(class Manager *mgr, std::function<void (u
, m_imageRecivedCount(0)
, m_isScanning(false)
, m_thread(nullptr)
, m_thread_cancelScan(nullptr)
{
ui->setupUi(this);
@ -49,6 +50,10 @@ Dialog_progress_ui::~Dialog_progress_ui()
{
HGBase_CloseThread(m_thread);
m_thread = nullptr;
HGBase_CloseThread(m_thread_cancelScan);
m_thread_cancelScan = nullptr;
m_mgr->m_progressUi = nullptr;
delete ui;
@ -72,8 +77,14 @@ void Dialog_progress_ui::closeEvent(QCloseEvent* e)
void Dialog_progress_ui::on_pbtn_cancelScan_clicked()
{
if (!m_isScanning)
return;
if (!quit_)
m_callback(UI_RESULT_CLOSE_CANCEL);
{
HGBase_OpenThread(CancelScanThreadFunc, this, &m_thread_cancelScan);
}
ui->pbtn_cancelScan->setVisible(false);
ui->label->setText(tr("stop scanning"));
}
@ -137,6 +148,13 @@ void HGAPI Dialog_progress_ui::ThreadFunc(HGThread thread, HGPointer param)
p->m_callback(UI_RESULT_CLOSE_NORMAL);
}
void HGAPI Dialog_progress_ui::CancelScanThreadFunc(HGThread thread, HGPointer param)
{
Dialog_progress_ui* p = (Dialog_progress_ui*)param;
if (p->m_callback)
p->m_callback(UI_RESULT_CLOSE_CANCEL);
}
void Dialog_progress_ui::FuncNotify(int event, void *msg, int flag)
{
Dialog_progress_ui *p = (Dialog_progress_ui *)g_manager->m_progressUi;

View File

@ -39,6 +39,7 @@ private slots:
public:
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
static void HGAPI CancelScanThreadFunc(HGThread thread, HGPointer param);
static void FuncNotify(int event, void *msg, int flag);
void clear_callback(void)
{
@ -56,6 +57,7 @@ private:
QTimer *m_timer;
bool m_isScanning;
HGThread m_thread;
HGThread m_thread_cancelScan;
};
#endif // DIALOG_PROGRESS_UI_H

View File

@ -125,7 +125,7 @@ void hg_settingdialog::apply_scheme(SANE_Handle dev, LPSANEAPI api, gb::sane_con
}
SANE_Int info = 0;
std::string val("");
api->sane_control_option_api(dev, SANE_OPT_ID_CUSTOM_GAMMA, SANE_ACTION_SET_VALUE, &val[0], &info);
//api->sane_control_option_api(dev, SANE_OPT_ID_CUSTOM_GAMMA, SANE_ACTION_SET_VALUE, &val[0], &info);
if (schm)
{

View File

@ -151,6 +151,66 @@ HGBool HGAPI HGLib_ReleaseImage(HGLibImage image)
return HGTRUE;
}
HGChar* HGAPI HGLib_GetOcrText(HGLibImage image)
{
if (NULL == image)
{
return NULL;
}
std::string strText;
HGOCRMgr ocrMgr = NULL;
HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr);
if (NULL != ocrMgr)
{
HGOCRRet ocrRet = NULL;
HGImgProc_ImageOCR(ocrMgr, (HGImage)image, &ocrRet);
if (NULL != ocrRet)
{
HGUInt blockCount = 0;
HGImgProc_GetOCRRetBlockCount(ocrRet, &blockCount);
for (HGUInt i = 0; i < blockCount; ++i)
{
const HGChar* text = NULL;
HGImgProc_GetOCRRetBlockText(ocrRet, i, &text);
strText += StdStringToUtf8(text);
if (i != blockCount - 1)
strText += "\n";
}
HGImgProc_DestroyOCRRet(ocrRet);
}
HGImgProc_DestroyOCRMgr(ocrMgr);
}
if (strText.empty())
{
return NULL;
}
HGChar* ocrText = (HGChar*)malloc(strText.size() + 1);
if (NULL == ocrText)
{
return NULL;
}
strcpy(ocrText, strText.c_str());
return ocrText;
}
HGBool HGAPI HGLib_ReleaseOcrText(HGChar* ocrText)
{
if (NULL == ocrText)
{
return HGFALSE;
}
free(ocrText);
return HGTRUE;
}
HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param)
{
return HGLibDeviceImpl::Init(func, param);

View File

@ -542,6 +542,12 @@ HGEXPORT HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath,
/* 释放图像 */
HGEXPORT HGBool HGAPI HGLib_ReleaseImage(HGLibImage image);
/* 获取OCR文本 */
HGEXPORT HGChar* HGAPI HGLib_GetOcrText(HGLibImage image);
/* 销毁OCR文本 */
HGEXPORT HGBool HGAPI HGLib_ReleaseOcrText(HGChar* ocrText);
/* 初始化扫描仪 */
HGEXPORT HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param);

View File

@ -70,6 +70,7 @@ namespace ver_2
m_scanTemp = false;
m_scanning = false;
m_scanEvent = NULL;
m_dpi = 200;
HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
@ -1493,6 +1494,7 @@ namespace ver_2
m_scanTemp = temp;
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_scanEvent);
assert(NULL != m_scanEvent);
m_dpi = GetDpi();
SANE_Status status = sane_start(m_devHandle);
if (SANE_STATUS_GOOD != status)
@ -1502,6 +1504,7 @@ namespace ver_2
m_scanEvent = NULL;
m_scanBlankCheck = false;
m_scanTemp = false;
m_dpi = 200;
return -1;
}
@ -1530,6 +1533,7 @@ namespace ver_2
m_scanBlankCheck = false;
m_scanTemp = false;
m_scanning = false;
m_dpi = 200;
errInfo.clear();
return 0;
@ -4139,6 +4143,31 @@ namespace ver_2
}
}
HGUInt ManagerV2::GetDpi()
{
HGUInt dpi = 200;
SANE_Int num_dev_options = 0;
sane_control_option(m_devHandle, 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(m_devHandle, i);
if (nullptr == desp)
continue;
if (SANE_TYPE_INT == desp->type)
{
SANE_Int value = 0;
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, nullptr);
if (0 == strcmp(desp->name, SANE_STD_OPT_NAME_RESOLUTION))
{
dpi = (HGUInt)value;
}
}
}
return dpi;
}
int ManagerV2::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param)
{
(void)hdev;
@ -4286,6 +4315,8 @@ namespace ver_2
HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
HGBool blank = HGFALSE;
if (p->m_scanBlankCheck)
HGImgProc_ImageBlankCheck(img, NULL, &blank);

View File

@ -297,6 +297,7 @@ namespace ver_2
void ExchangeBindFolderImage(const std::vector<BatchTableInfo>& tables, int imageIndex1, int imageIndex2);
void ClearBindFolderImageList(const std::vector<BatchTableInfo>& tables);
HGUInt GetDpi();
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
@ -319,6 +320,7 @@ namespace ver_2
bool m_scanTemp;
bool m_scanning;
HGEvent m_scanEvent;
HGUInt m_dpi;
sqlite3* m_sqlite;
std::string m_currBatchId;

View File

@ -94,6 +94,19 @@ ImageParam.tiffJpegQuality = 80
ImageParam.ocr = 0
Ret = HGLib_SaveImage(Image, c_char_p(b"2.jpg"), pointer(ImageParam))
#OCR
HGLib_GetOcrText = Objdll.HGLib_GetOcrText
HGLib_GetOcrText.argtypes = [ctypes.c_void_p]
HGLib_GetOcrText.restype = ctypes.c_void_p
OcrText = HGLib_GetOcrText(Image)
if OcrText:
print(ctypes.string_at(OcrText).decode('utf-8'));
HGLib_ReleaseOcrText = Objdll.HGLib_ReleaseOcrText
HGLib_ReleaseOcrText.argtypes = [ctypes.c_void_p]
HGLib_ReleaseOcrText.restype = ctypes.c_int
Ret = HGLib_ReleaseOcrText(OcrText)
#释放图像资源
HGLib_ReleaseImage = Objdll.HGLib_ReleaseImage
HGLib_ReleaseImage.argtypes = [ctypes.c_void_p]
@ -102,7 +115,7 @@ Ret = HGLib_ReleaseImage(Image)
#设备热拔插回调事件
def HGLibDeviceHotPlugEventFunc(event: c_uint, deviceName: c_char_p, param: c_void_p):
print(deviceName)
print(deviceName.decode('utf-8'))
return
#初始化操作
@ -196,12 +209,14 @@ Ret = HGLib_SetDeviceParam(Device, 51, byref(DevParam))
DevParam = ctypes.c_double(0.1)
Ret = HGLib_SetDeviceParam(Device, 52, byref(DevParam))
bStop = False
#扫描事件回调
def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: c_char_p, param: c_void_p):
s_info=info
def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: ctypes.c_char_p, param: c_void_p):
global bStop
print("event code",event," event info:",s_info)
print("event code:", event)
if info:
print("event info:", info.decode('utf-8'))
if event == 2:#HGLIB_DEVSCAN_EVENT_END 扫描停止
bStop=True
print("bStop true")

View File

@ -178,20 +178,23 @@
}
else if ("scan_image" == message['func'])
{
var info = document.getElementById('info');
info.value = message['image_path'];
//var myCanvas = document.getElementById("myCanvas");
//myCanvas.src = message['image_base64'];
var req1 = {'func':'insert_local_image', 'iden':'111', 'image_path':''};
req1.image_path = message['image_path'];
socket.send(JSON.stringify(req1));
//var req1 = {'func':'insert_local_image', 'iden':'111', 'image_path':''};
//req1.image_path = message['image_path'];
//socket.send(JSON.stringify(req1));
var req2 = {'func':'upload_local_file', 'iden':'111', 'file_path':'', 'upload_mode':'http', 'http_host':'192.168.100.148', 'http_port':8001};
req2.file_path = message['image_path'];
socket.send(JSON.stringify(req2));
//var req2 = {'func':'upload_local_file', 'iden':'111', 'file_path':'', 'upload_mode':'http', 'http_host':'192.168.100.70', 'http_port':8001, 'http_path':'/upload.php'};
//req2.file_path = message['image_path'];
//socket.send(JSON.stringify(req2));
var req3 = {'func':'delete_local_file', 'file_path':''};
req3.file_path = message['image_path'];
socket.send(JSON.stringify(req3));
//var req3 = {'func':'delete_local_file', 'file_path':''};
//req3.file_path = message['image_path'];
//socket.send(JSON.stringify(req3));
}
else if ("stop_scan" == message['func'])
{
@ -393,11 +396,12 @@
{
socket.send(JSON.stringify({
'func':'upload_local_file',
'file_path':'D:\\1.jpg',
'file_path':'D:\\5.jpg',
'remote_file_path':'/savedir/123.jpg',
'upload_mode':'http',
'http_host':'192.168.100.148',
'http_port':8001
'http_host':'192.168.1.70',
'http_port':8080,
'http_path':'/upload.php'
}));
}

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>Upload</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"/>
<input type="submit" value="submit"/>
</form>
</body>
</html>

View File

@ -0,0 +1,9 @@
<?php
$file=$_FILES['filename'];
$fileName=$file['name'];
move_uploaded_file($file['tmp_name'],$fileName);
echo "<img style='width:500px' src='$fileName'>";
?>

View File

@ -21,6 +21,14 @@
constructor: WebScanController,
/*****************************************扫描仪相关********************************************************************************/
isDeviceInit: function (callBack) {
const that = this
this.sendCommand({
func: "is_device_init",
iden: that.wslicence
}, callBack)
},
initDevice: function (callBack) {
const that = this
this.sendCommand({
@ -449,6 +457,7 @@
},
//插入本地图像需返回成功后前端缩略图才能作相应的UI修改
insertLocalImage: function (imagePath, insertIndex, idenInfo, callBack) {
console.log('insertLocalImage insertIndex:' + insertIndex + ' imagePath:' + imagePath + ' ')
const that = this
this.sendCommand({
func: "insert_local_image",
@ -502,6 +511,7 @@
},
//修改图像
modifyImage: function (imageIndex, imageBase64, idenInfo, callBack) {
console.log('modifyImage imageIndex:' + imageIndex)
const that = this
this.sendCommand({
func: "modify_image",
@ -737,7 +747,7 @@
};
this.SocketClient.onmessage = function (event) {
console.log(TAG, "connect onmessage data:" + event.data)
// console.log(TAG, "connect onmessage data:" + event.data)
if (event && event.data) {
socketCallBack(new Result(SOCKET_EVENT, "", event.data))
}

View File

@ -42,8 +42,8 @@ new Vue({
showBigImageDialog: false,//是否显示大图
selectBigImage: '',//当前选中的大图base64
scanMode: 'normal',//当前扫描模式 normal:正常往后添加 insert:在指定位置前后插入 cover:从指定位置开始往后覆盖或者添加
curInsertIndex: -1,//当前需要插入的位置
curCoverIndex: -1,//当前需要覆盖扫描的位置
curInsertIndex: -1,//顺序扫描 当前需要插入的位置
curCoverIndex: -1,//覆盖扫描 当前需要覆盖扫描的位置
needCoverCount: -1,//当前需要覆盖扫描的数量
isSetup: false,//是否显示参数设置框
activeName: '1',//设置框的tab位
@ -164,6 +164,13 @@ new Vue({
],
markPositionTipX: 0,//提示X
markPositionTipY: 0,//提示Y
insertQueue: [{
insertType: -1,// 插入类型 -1占位啥都没有 1.加到末尾 2.插入到指定位置 3.覆盖指定位置图片
imagePath: '',//插入图像的路径
insertIndex: 0, //插入位置
idenInfo: {},//签名
}],//插入队列,等待结果返回再继续插入
insertLoopWork: Number,
},
created: function () {
window.eleLoadding = this.eleLoadding;
@ -171,7 +178,25 @@ new Vue({
window.scanCallBack = this.scanCallBack;
window.setupWindowCallBack = this.setupWindowCallBack
window.socketCallBack = this.onSocketCallBack
window.onbeforeunload = this.releaseService
window.onbeforeunload = this.onCloseScreen
let that = this;
this.insertQueue.length = 0
this.insertLoopWork = setInterval(() => {
//首位不是占位数据的
if (that.insertQueue.length > 0 && that.insertQueue[0].insertType !== -1) {
let insertInfo = that.insertQueue[0]
console.log('loop work' + insertInfo.insertType + ' ' + insertInfo.imagePath)
//先去掉队列的第一位
that.insertQueue.splice(0, 1)
//插入占位数据
that.insertQueue.splice(0, 0, {insertType: -1})
that.insertAction(insertInfo)
}
}, 400);
},
mounted: function () {
let canvasContainer = $("#canvas-container")
@ -232,37 +257,45 @@ new Vue({
},
dispatchEvent: function (info) {
if (info.func) {
if (info.ret != null && info.ret != undefined) {
if (info.ret == 0) {//返回成功
let funcName = this.WebScanController.getCallBack(info.func)
if (funcName) {
funcName(info)
} else {
this.commonDispatch(info)
}
} else {//统一异常处理 弹个窗
this.eleUnloadding()
this.eleMessage(info.err_info ? info.err_info : '未知异常', 'error')
if (info.func != null && info.func != undefined) {
if (info.func === 'image_add_watermark') {//特殊情况单独处理
//添加水印失败了
// this.reLoadImageList()
}
}
if (info.func === 'is_device_init' || info.func === 'get_curr_device_name') {
//单独处理 ret 0 初始化了 非0 未初始化
let funcName = this.WebScanController.getCallBack(info.func)
if (funcName) {
funcName(info)
}
} else {
this.commonDispatch(info)
if (info.ret != null && info.ret != undefined) {
if (info.ret == 0) {//返回成功
let funcName = this.WebScanController.getCallBack(info.func)
if (funcName) {
funcName(info)
} else {
this.commonDispatch(info)
}
} else {//统一异常处理 弹个窗
this.eleUnloadding()
this.eleMessage(info.err_info ? info.err_info : '未知异常', 'error')
if (info.func != null && info.func != undefined) {
if (info.func === 'image_add_watermark') {//特殊情况单独处理
//添加水印失败了
// this.reLoadImageList()
}
}
}
} else {
this.commonDispatch(info)
}
}
}
},
commonDispatch: function (info) {//较通用事件处理
this.eleUnloadding()
console.log('commonDispatch', JSON.stringify(info))
// console.log('commonDispatch', JSON.stringify(info))
if (info) {
switch (info.func) {
case "device_arrive"://设备装载
this.eleMessage("设备已装载")
this.getDeviceNameList()
break
case "device_remove"://设备卸载
this.eleMessage("设备已移除!")
@ -294,10 +327,6 @@ new Vue({
case "scan_image"://图片回调
let imagePath = info.image_path
this.appendLog('图片回调:' + imagePath)
console.log('图片回调:' + imagePath + ' info:' + JSON.stringify(info))
let that = this
if (this.scanMode == 'insert') {//是插入扫描
this.curCoverIndex = -1
@ -308,130 +337,181 @@ new Vue({
this.curInsertIndex = this.selectImageObj.index
}
console.log('插入扫描待插入index:' + this.curInsertIndex + " path:" + imagePath)
this.WebScanController.insertLocalImage(imagePath, this.curInsertIndex,
{
console.log('插入扫描:队列插入位:' + this.curInsertIndex + " path:" + imagePath)
this.insertQueue.push({
insertType: 2,
imagePath: imagePath,
insertIndex: this.curInsertIndex,
idenInfo: {
insertType: 2,
insertIndex: this.curInsertIndex,
path: imagePath,
thumbnail: info.image_base64,
base64: info.image_base64
},
function (insertInfo) {
console.log('插入扫描插入index' + that.curInsertIndex)
let idenInfo = JSON.parse(insertInfo.iden);
that.urls.splice(that.curInsertIndex, 0, {
path: idenInfo.path,
thumbnail: idenInfo.thumbnail,
base64: idenInfo.base64
});
that.curInsertIndex++
that.$forceUpdate()
})
},//签名
})
this.curInsertIndex++
} else if (this.scanMode == 'cover') {//是覆盖扫描
this.curInsertIndex = -1
if (this.curCoverIndex != -1) {
} else {
this.curCoverIndex = this.selectImageObj.index
this.needCoverCount = this.urls.length - this.curCoverIndex
console.log('当前需要覆盖的起始位index' + this.curCoverIndex + ' 总长度位置:' + (this.urls.length - 1))
console.log('需要覆盖的数量:' + this.needCoverCount)
}
if (this.needCoverCount > 0) {//还在覆盖范围内,直接覆盖掉
this.WebScanController.modifyImage(this.curCoverIndex, info.image_base64, {
base64: info.image_base64,
thumbnail: info.image_base64,
path: imagePath
}, function (modifyInfo) {
console.log('覆盖扫描:修改成功 index:' + that.curCoverIndex)
console.log('覆盖前index==' + that.curCoverIndex + ' path:' + that.urls[that.curCoverIndex].path)
let idenInfo = JSON.parse(modifyInfo.iden);
that.urls[that.curCoverIndex] = {
base64: idenInfo.base64,
thumbnail: idenInfo.thumbnail,
path: idenInfo.path
}
console.log('覆盖后index==' + that.curCoverIndex + ' path:' + that.urls[that.curCoverIndex].path)
that.curCoverIndex++
that.needCoverCount--
that.$forceUpdate()
})
} else {//之后都是新增的往后添加了
this.WebScanController.insertLocalImage(imagePath, this.urls.length, {
console.log('覆盖扫描起始位index' + this.curCoverIndex + ' imagePath:' + imagePath + ' 总长度位置:' + (this.urls.length - 1))
console.log('需要覆盖的数量:' + this.needCoverCount)
this.insertQueue.push({
insertType: 3,
imagePath: imagePath,
idenInfo: {
insertType: 3,
path: imagePath,
thumbnail: info.image_base64,
base64: info.image_base64
}, function (result) {
console.log('覆盖扫描:插入成功 index' + that.urls.length)
let idenInfo = JSON.parse(result.iden);
that.urls.push({
path: idenInfo.path,
thumbnail: idenInfo.thumbnail,
base64: idenInfo.base64
})
that.$forceUpdate()
that.$nextTick(function () {
if (that.$refs.imageArea) {
that.$refs.imageArea.scrollTop = that.$refs.imageArea.scrollHeight
}
})
})
}
},
})
} else {//正常按顺序
this.curInsertIndex = -1
this.curCoverIndex = -1
let that = this;
console.log('顺序扫描,队列插入位' + this.curInsertIndex + ' imagePath:' + imagePath)
this.WebScanController.insertLocalImage(imagePath, this.urls.length, {
path: imagePath,
thumbnail: info.image_base64,
base64: info.image_base64
}, function (result) {
let idenInfo = JSON.parse(result.iden);
console.log('正常扫描:插入成功 index' + that.urls.length + ' path:' + idenInfo.path)
that.urls.push({
path: idenInfo.path,
thumbnail: idenInfo.thumbnail,
base64: idenInfo.base64
})
that.$nextTick(function () {
if (that.$refs.imageArea) {
that.$refs.imageArea.scrollTop = that.$refs.imageArea.scrollHeight
}
})
this.insertQueue.push({
insertType: 1,
imagePath: imagePath,
insertIndex: this.curInsertIndex,
idenInfo: {
insertType: 2,
path: imagePath,
insertIndex: this.curInsertIndex,
base64: info.image_base64
},//签名
})
this.curInsertIndex++
}
break
}
}
},
//扫描展示逻辑
insertAction: function (info) {
/* {
insertType: 1,
imagePath: imagePath,
insertIndex: this.insertIndex,
idenInfo: {
insertType: 2,
path: imagePath,
insertIndex: this.insertIndex,
base64: info.image_base64
}*/
let that = this
if (info.insertType === 3) {//是覆盖扫描逻辑
if (this.needCoverCount > 0) {//还在覆盖范围内,直接覆盖掉
this.WebScanController.modifyImage(this.curCoverIndex, info.idenInfo.base64, info.idenInfo, function (modifyInfo) {
let idenInfo = JSON.parse(modifyInfo.iden);
console.log('覆盖前index==' + that.curCoverIndex + ' path:' + that.urls[that.curCoverIndex].path)
that.urls[that.curCoverIndex] = {
base64: idenInfo.base64,
thumbnail: idenInfo.base64,
path: idenInfo.path
}
console.log('覆盖后index==' + that.curCoverIndex + ' path:' + that.urls[that.curCoverIndex].path)
that.curCoverIndex++
that.needCoverCount--
that.$forceUpdate()
//把占位符删掉 继续下一轮循环
if (that.insertQueue.length > 0 && that.insertQueue[0].insertType === -1) {
that.insertQueue.splice(0, 1)
}
})
} else {//之后都是新增的往后添加了
this.WebScanController.insertLocalImage(info.imagePath, this.urls.length, info.idenInfo, function (result) {
console.log('覆盖扫描:插入成功 index' + that.urls.length)
let idenInfo = JSON.parse(result.iden);
that.urls.push({
path: idenInfo.path,
thumbnail: idenInfo.base64,
base64: idenInfo.base64
})
that.$forceUpdate()
that.$nextTick(function () {
if (that.$refs.imageArea) {
that.$refs.imageArea.scrollTop = that.$refs.imageArea.scrollHeight
}
})
//把占位符删掉 继续下一轮循环
if (that.insertQueue.length > 0 && that.insertQueue[0].insertType === -1) {
that.insertQueue.splice(0, 1)
}
})
}
} else {
this.WebScanController.insertLocalImage(info.imagePath, info.insertIndex, info.idenInfo, function (result) {
let idenInfo = JSON.parse(result.iden);
if (idenInfo.insertType === 1) {
//正常扫描,往后添加
console.log('正常扫描:插入成功 index' + idenInfo.insertIndex + ' path:' + idenInfo.path)
//插入到正确位置
that.urls.splice(idenInfo.insertIndex, 0, {
path: idenInfo.path,
thumbnail: idenInfo.base64,
base64: idenInfo.base64
})
that.$nextTick(function () {
if (that.$refs.imageArea) {
that.$refs.imageArea.scrollTop = that.$refs.imageArea.scrollHeight
}
})
} else if (idenInfo.insertType == 2) {
//插入扫描,指定位置
console.log('插入扫描插入index' + idenInfo.insertIndex + ' path:' + idenInfo.path)
//插入到正确位置
that.urls.splice(idenInfo.insertIndex, 0, {
path: idenInfo.path,
thumbnail: idenInfo.base64,
base64: idenInfo.base64
})
that.$forceUpdate()
}
//把占位符删掉 继续下一轮循环
if (that.insertQueue.length > 0 && that.insertQueue[0].insertType === -1) {
that.insertQueue.splice(0, 1)
}
})
}
},
//一些初始化操作
initData: function () {
let that = this
// this.initDevice()
this.getGlobalConfig()
this.getBatchList(function () {
that.changeBatch(that.batchIdList.slice(-1)[0])
})
},
//界面销毁
onCloseScreen: function () {
this.releaseService()
if (this.insertLoopWork) {
clearInterval(this.insertLoopWork)
}
},
//关闭服务
releaseService: function () {
console.log('releaseService')
this.deinitDevices()
// this.stopBindFolder()
if (this.WebScanController) {
@ -465,12 +545,27 @@ new Vue({
//初始化设备
initDevice: function (succcallBack) {
let that = this
this.WebScanController.initDevice(function (info) {
console.log('init devices :' + info)
that.deviceInited = true
if (succcallBack != null) {
succcallBack()
this.WebScanController.isDeviceInit(function (info) {
console.log('isDeviceInit:' + JSON.stringify(info))
if (info.ret == 0) {
//已经初始化
that.deviceInited = true
if (succcallBack != null) {
succcallBack()
}
} else {
//没有初始化
console.log('start device init ' + new Date().getTime())
that.WebScanController.initDevice(function (info) {
console.log('init devices :' + JSON.stringify(info) + ' ' + new Date().getTime())
that.deviceInited = true
if (succcallBack != null) {
succcallBack()
}
})
}
})
},
//反初始化设备(需初始化后调用)
@ -489,7 +584,7 @@ new Vue({
getDeviceNameList: function () {
let that = this
this.WebScanController.getDeviceNameList(function (info) {
console.log('getDeviceNameList :' + info)
console.log('getDeviceNameList :' + JSON.stringify(info))
if (info.device_name_list) {//反初始化成功
for (let i = 0; i < info.device_name_list.length; i++) {
console.log('getDeviceNameList index:' + i + " item:" + info.device_name_list[i])
@ -501,12 +596,24 @@ new Vue({
//打开设备
openDevice: function (deviceName) {
let that = this
this.WebScanController.openDevice(deviceName, function (info) {
console.log('open devices :' + info)
that.deviceOpened = true
that.eleLoadding()
that.getScanParams()
this.WebScanController.getCurrDeviceName(function (info) {
console.log('getCurrDeviceName:' + JSON.stringify(info))
if (info.device_name) {
that.deviceOpened = true
that.eleLoadding()
that.getScanParams()
} else {
that.WebScanController.openDevice(deviceName, function (info) {
console.log('open devices :' + JSON.stringify(info))
that.deviceOpened = true
that.eleLoadding()
that.getScanParams()
})
}
})
},
//关闭设备
closeDevice: function () {
@ -546,7 +653,7 @@ new Vue({
let that = this
this.WebScanController.getScanParams(function (info) {
that.eleUnloadding()
console.log('获取到的扫描参数 ' + JSON.stringify(info))
// console.log('获取到的扫描参数 ' + JSON.stringify(info))
that.scanParamsRange = info.device_param
that.parameterCoerceIn()
})
@ -628,8 +735,8 @@ new Vue({
this.eleMessage('请先等待扫描结束!', 'warning')
return;
}
this.scanMode = 'normal'
this.curInsertIndex = this.urls.length
this.WebScanController.startScan(function (info) {
console.log('startScan :' + info)
})
@ -665,7 +772,11 @@ new Vue({
}
let that = this
this.curCoverIndex = -1
this.curInsertIndex = -1
this.curCoverIndex = this.selectImageObj.index
this.needCoverCount = this.urls.length - this.curCoverIndex
this.WebScanController.startScan(function (info) {
console.log('覆盖扫描')
that.scanMode = 'cover'
@ -695,6 +806,9 @@ new Vue({
let that = this
this.initDevice(function () {
that.isSetup = true
setTimeout(function () {
that.getDeviceNameList()
}, 500);
})
}
},
@ -773,7 +887,7 @@ new Vue({
this.eleLoadding()
this.WebScanController.openBatch(batchId, function (info) {
console.log('切换批次:' + JSON.stringify(info))
console.log('打开批次:' + JSON.stringify(info))
that.urls.length = 0//先清空一下
that.currentBatch = batchId
//重新加载
@ -2230,8 +2344,8 @@ new Vue({
this.scanParams.push(newGroup)
}
console.log('当前扫描参数:' + JSON.stringify(this.scanParams))
console.log('当前强强强扫描参数:' + JSON.stringify(paramsRange))
// console.log('当前扫描参数:' + JSON.stringify(this.scanParams))
// console.log('当前强强强扫描参数:' + JSON.stringify(paramsRange))
this.$forceUpdate()
},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -761,7 +761,7 @@
<script src="js/WebScanController.js"></script>
<script src="js/util.js"></script>
<script src="js/FileSaver.js"></script>
<!-- <script src="js/colorpicker.js"></script> -->
<!--<script src="js/colorpicker.js"></script>-->
<script src="js/scanWeb.js"></script>
</body>
</html>