From c60ab5e65acf95052f8fa51cfd8ca3e35e1b2203 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Thu, 12 May 2022 09:15:57 +0800 Subject: [PATCH] =?UTF-8?q?HGImgProc=5FImageOCRToFile=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E7=9A=84outType=E4=B8=BA0=E6=97=B6=EF=BC=8C=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=90=8D=E6=9D=A5=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/windows/HGTest/HGTestDlg.cpp | 19 -------- imgproc/HGOCR.cpp | 6 +-- imgproc/HGOCR.h | 30 ++++++------- imgproc/HGOCRBase.cpp | 71 +++++++++++++++++++++++++++++- imgproc/HGOCRBase.hpp | 3 ++ imgproc/HGOCRHanvon.cpp | 17 ++++--- 6 files changed, 103 insertions(+), 43 deletions(-) diff --git a/build/windows/HGTest/HGTestDlg.cpp b/build/windows/HGTest/HGTestDlg.cpp index 0aef0ac4..996ecd4b 100644 --- a/build/windows/HGTest/HGTestDlg.cpp +++ b/build/windows/HGTest/HGTestDlg.cpp @@ -104,25 +104,6 @@ BOOL CHGTestDlg::OnInitDialog() SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 - HGOCRMgr hOCRMgr = NULL; - HGImgProc_CreateOCRMgr(&hOCRMgr); - - HGImage image = NULL; - HGImgFmt_LoadImage("D:\\1.bmp", 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image); - if (NULL != image) - { - HGOCRRet ocrRet; - HGImgProc_ImageOCR(hOCRMgr, image, &ocrRet); - - HGImgProc_ImageOCRToFile(hOCRMgr, image, HGIMGPROC_OCROUTTYPE_PDF, "D:\\1.pdf"); - - HGUInt direct; - HGImgProc_ImageTextDirectOCR(hOCRMgr, image, &direct); - HGBase_DestroyImage(image); - } - - HGImgProc_DestroyOCRMgr(hOCRMgr); - return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } diff --git a/imgproc/HGOCR.cpp b/imgproc/HGOCR.cpp index a9d33139..88e1ca86 100644 --- a/imgproc/HGOCR.cpp +++ b/imgproc/HGOCR.cpp @@ -60,7 +60,7 @@ HGResult HGAPI HGImgProc_ImageOCR(HGOCRMgr ocrMgr, HGImage image, HGOCRRet* ocrR return HGBASE_ERR_OK; } -HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet) +HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRRet ocrRet) { if (NULL == ocrRet) { @@ -72,7 +72,7 @@ HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet) return HGBASE_ERR_OK; } -HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt* count) +HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRRet ocrRet, HGUInt* count) { if (NULL == ocrRet) { @@ -83,7 +83,7 @@ HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt* count) return ocrRetImpl->GetBlockCount(count); } -HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRMgr ocrRet, HGUInt index, const HGChar** text) +HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRRet ocrRet, HGUInt index, const HGChar** text) { if (NULL == ocrRet) { diff --git a/imgproc/HGOCR.h b/imgproc/HGOCR.h index ee721311..281f45ea 100644 --- a/imgproc/HGOCR.h +++ b/imgproc/HGOCR.h @@ -9,25 +9,25 @@ HG_DECLARE_HANDLE(HGOCRMgr); HG_DECLARE_HANDLE(HGOCRRet); -/* PDF */ -#define HGIMGPROC_OCROUTTYPE_PDF 1L /* RTF */ -#define HGIMGPROC_OCROUTTYPE_RTF 2L +#define HGIMGPROC_OCROUTTYPE_RTF 1L /* XLS */ -#define HGIMGPROC_OCROUTTYPE_XLS 3L +#define HGIMGPROC_OCROUTTYPE_XLS 2L /* TXT */ -#define HGIMGPROC_OCROUTTYPE_TXT 4L +#define HGIMGPROC_OCROUTTYPE_TXT 3L +/* PDF */ +#define HGIMGPROC_OCROUTTYPE_PDF 4L /* OFD */ #define HGIMGPROC_OCROUTTYPE_OFD 5L /* δת */ -#define HGIMGPROC_OCRTEXTDIRECT_ORIGINAL 1L -/* ˳ʱת90 */ -#define HGIMGPROC_OCRTEXTDIRECT_RIGHT 2L -/* ʱת90 */ -#define HGIMGPROC_OCRTEXTDIRECT_LEFT 3L -/* ת180 */ -#define HGIMGPROC_OCRTEXTDIRECT_180 4L +#define HGIMGPROC_OCRTEXTDIRECT_ORI 1L +/* ˳ʱת90 */ +#define HGIMGPROC_OCRTEXTDIRECT_RIGHT 2L +/* ʱת90 */ +#define HGIMGPROC_OCRTEXTDIRECT_LEFT 3L +/* ת180 */ +#define HGIMGPROC_OCRTEXTDIRECT_180 4L /* ʼOCRģ */ @@ -43,15 +43,15 @@ HGEXPORT HGResult HGAPI HGImgProc_ImageOCR(HGOCRMgr ocrMgr, HGImage image, HGOCR /* OCR */ -HGEXPORT HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet); +HGEXPORT HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRRet ocrRet); /* ȡOCR */ -HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt *count); +HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRRet ocrRet, HGUInt *count); /* ȡOCRı */ -HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRMgr ocrRet, HGUInt index, const HGChar **text); +HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRRet ocrRet, HGUInt index, const HGChar **text); /* ͼOCRļ */ diff --git a/imgproc/HGOCRBase.cpp b/imgproc/HGOCRBase.cpp index df2f652b..b03fe72e 100644 --- a/imgproc/HGOCRBase.cpp +++ b/imgproc/HGOCRBase.cpp @@ -1 +1,70 @@ -#include "HGOCRBase.hpp" \ No newline at end of file +#include "HGOCRBase.hpp" +#include "HGOCR.h" + +HGUInt HGOCRBase::GetOutTypeByFileName(const HGChar* fileName) +{ + if (NULL == fileName) + { + return 0; + } + + const char* p = strrchr(fileName, '.'); + if (NULL == p) + { + return 0; + } + +#if defined(HG_CMP_MSC) + if (0 == _stricmp(p, ".pdf")) + { + return HGIMGPROC_OCROUTTYPE_PDF; + } + + if (0 == _stricmp(p, ".rtf")) + { + return HGIMGPROC_OCROUTTYPE_RTF; + } + + if (0 == _stricmp(p, ".xls")) + { + return HGIMGPROC_OCROUTTYPE_XLS; + } + + if (0 == _stricmp(p, ".txt")) + { + return HGIMGPROC_OCROUTTYPE_TXT; + } + + if (0 == _stricmp(p, ".ofd")) + { + return HGIMGPROC_OCROUTTYPE_OFD; + } +#else + if (0 == strcasecmp(p, ".pdf")) + { + return HGIMGPROC_OCROUTTYPE_PDF; + } + + if (0 == strcasecmp(p, ".rtf")) + { + return HGIMGPROC_OCROUTTYPE_RTF; + } + + if (0 == strcasecmp(p, ".xls")) + { + return HGIMGPROC_OCROUTTYPE_XLS; + } + + if (0 == strcasecmp(p, ".txt")) + { + return HGIMGPROC_OCROUTTYPE_TXT; + } + + if (0 == strcasecmp(p, ".ofd")) + { + return HGIMGPROC_OCROUTTYPE_OFD; + } +#endif + + return 0; +} \ No newline at end of file diff --git a/imgproc/HGOCRBase.hpp b/imgproc/HGOCRBase.hpp index ab437b53..95b116d7 100644 --- a/imgproc/HGOCRBase.hpp +++ b/imgproc/HGOCRBase.hpp @@ -15,6 +15,9 @@ public: virtual HGResult ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet) = 0; virtual HGResult ImageOCRToFile(HGImage image, HGUInt outType, const HGChar *outFileName) = 0; virtual HGResult ImageTextDirectOCR(HGImage image, HGUInt* direct) = 0; + +protected: + static HGUInt GetOutTypeByFileName(const HGChar* fileName); }; #endif /* __HGOCRBASE_H__ */ \ No newline at end of file diff --git a/imgproc/HGOCRHanvon.cpp b/imgproc/HGOCRHanvon.cpp index 99b9b792..c3280c22 100644 --- a/imgproc/HGOCRHanvon.cpp +++ b/imgproc/HGOCRHanvon.cpp @@ -118,22 +118,29 @@ HGResult HGOCRHanvon::ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet) HGResult HGOCRHanvon::ImageOCRToFile(HGImage image, HGUInt outType, const HGChar *outFileName) { - if (NULL == image || outType < HGIMGPROC_OCROUTTYPE_PDF || outType > HGIMGPROC_OCROUTTYPE_OFD || NULL == outFileName) + if (NULL == image || outType > HGIMGPROC_OCROUTTYPE_OFD || NULL == outFileName) { return HGBASE_ERR_INVALIDARG; } + if (0 == outType) + outType = GetOutTypeByFileName(outFileName); + int fileType = -1; - if (HGIMGPROC_OCROUTTYPE_PDF == outType) - fileType = FILE_PDF; - else if (HGIMGPROC_OCROUTTYPE_RTF == outType) + if (HGIMGPROC_OCROUTTYPE_RTF == outType) fileType = FILE_RTF; else if (HGIMGPROC_OCROUTTYPE_XLS == outType) fileType = FILE_XLS; else if (HGIMGPROC_OCROUTTYPE_TXT == outType) fileType = FILE_TXT; + else if (HGIMGPROC_OCROUTTYPE_PDF == outType) + fileType = FILE_PDF; else if (HGIMGPROC_OCROUTTYPE_OFD == outType) fileType = FILE_OFD; + if (-1 == fileType) + { + return HGBASE_ERR_INVALIDARG; + } HGChar tmpFileName[256]; HGBase_GetTmpFileName(tmpFileName, 256); @@ -174,7 +181,7 @@ HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct) } if (ROT0 == dire) - *direct = HGIMGPROC_OCRTEXTDIRECT_ORIGINAL; + *direct = HGIMGPROC_OCRTEXTDIRECT_ORI; else if (ROT90 == dire) *direct = HGIMGPROC_OCRTEXTDIRECT_RIGHT; else if (ROT180 == dire)