code_app/sdk/scannerlib/HGScannerLib.cpp

208 lines
5.1 KiB
C++
Raw Normal View History

2022-07-19 03:51:00 +00:00
#include "HGScannerLib.h"
#include "base/HGInc.h"
#include "base/HGImage.h"
#include "imgfmt/HGImgFmt.h"
2022-07-20 09:10:37 +00:00
#include "imgproc/HGOCR.h"
2022-07-19 03:51:00 +00:00
#include "HGString.h"
#include "HGLibDeviceImpl.hpp"
typedef struct
{
HGUInt size; /* <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>С */
HGUInt jpegQuality; /* jpeg<65><67><EFBFBD><EFBFBD>Ч, 0-100 */
HGUInt tiffCompression; /* tiff<66><66><EFBFBD><EFBFBD>Ч, HGLIB_TIFFCOMPRESSION_* */
HGUInt tiffJpegQuality; /* tiff<66><66>HGLIB_TIFFCOMPRESSION_JPEG<45><47><EFBFBD><EFBFBD>Ч, 0-100 */
HGBool ocr; /* <20>Ƿ<EFBFBD>OCR<43><52>pdf<64><66>ofd<66><64>ʽ<EFBFBD><CABD>Ч */
}HGLibSaveImageParam_V1;
HGLibImage HGAPI HGLib_LoadImage(const HGChar* filePath)
{
if (NULL == filePath)
{
return NULL;
}
HGImage image = NULL;
HGImgFmt_LoadImage(Utf8ToStdString(filePath).c_str(), 0, NULL, 0, HGBASE_IMGORIGIN_TOP, &image);
return (HGLibImage)image;
}
HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath, const HGLibSaveImageParam* saveParam)
{
if (NULL == image || NULL == savePath)
{
return HGFALSE;
}
HGUInt fmtType = 0;
HGImgFmt_GetImgFmtTypeFromFileName(Utf8ToStdString(savePath).c_str(), &fmtType);
if (fmtType < HGIMGFMT_TYPE_JPEG || fmtType > HGIMGFMT_TYPE_GIF)
{
return HGFALSE;
}
if (NULL == saveParam)
{
return (HGBASE_ERR_OK == HGImgFmt_SaveImage((HGImage)image, fmtType, NULL, Utf8ToStdString(savePath).c_str()));
}
if (saveParam->size == sizeof(HGLibSaveImageParam_V1))
{
const HGLibSaveImageParam_V1* saveParamV1 = (const HGLibSaveImageParam_V1*)saveParam;
if ((HGIMGFMT_TYPE_PDF == fmtType || HGIMGFMT_TYPE_OFD == fmtType) && saveParamV1->ocr)
{
HGOCRMgr ocrMgr = NULL;
HGImgProc_CreateOCRMgr(&ocrMgr);
if (NULL == ocrMgr)
{
return HGFALSE;
}
HGBool ret = (HGBASE_ERR_OK == HGImgProc_ImageOCRToFile(ocrMgr, (HGImage)image, 0, Utf8ToStdString(savePath).c_str()));
HGImgProc_DestroyOCRMgr(ocrMgr);
return ret;
}
HGImgFmtSaveInfo saveInfo;
saveInfo.jpegQuality = saveParamV1->jpegQuality;
saveInfo.tiffCompression = 0;
if (HGLIB_TIFFCOMPRESSION_NONE == saveParamV1->tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_NONE;
else if (HGLIB_TIFFCOMPRESSION_CCITTFAX4 == saveParamV1->tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_CCITTFAX4;
else if (HGLIB_TIFFCOMPRESSION_LZW == saveParamV1->tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_LZW;
else if (HGLIB_TIFFCOMPRESSION_JPEG == saveParamV1->tiffCompression)
saveInfo.tiffCompression = HGIMGFMT_TIFFCOMP_JPEG;
saveInfo.tiffJpegQuality = saveParamV1->tiffJpegQuality;
return (HGBASE_ERR_OK == HGImgFmt_SaveImage((HGImage)image, fmtType, &saveInfo, Utf8ToStdString(savePath).c_str()));
}
return HGFALSE;
}
HGBool HGAPI HGLib_ReleaseImage(HGLibImage image)
{
if (NULL == image)
{
return HGFALSE;
}
HGBase_DestroyImage((HGImage)image);
return HGTRUE;
}
HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param)
{
return HGLibDeviceImpl::Init(func, param);
}
HGBool HGAPI HGLib_DeinitDevice()
{
return HGLibDeviceImpl::Deinit();
}
HGChar** HGAPI HGLib_GetDeviceNameList()
{
return HGLibDeviceImpl::GetNameList();
}
HGBool HGAPI HGLib_ReleaseDeviceNameList(HGChar** deviceName)
{
return HGLibDeviceImpl::ReleaseNameList(deviceName);
}
HGLibDevice HGAPI HGLib_OpenDevice(const HGChar* deviceName)
{
2022-07-19 09:09:52 +00:00
return (HGLibDevice)HGLibDeviceImpl::Open(deviceName);
2022-07-19 03:51:00 +00:00
}
HGBool HGAPI HGLib_CloseDevice(HGLibDevice device)
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return HGFALSE;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->Close();
2022-07-19 03:51:00 +00:00
}
2022-08-18 10:42:57 +00:00
HGBool HGAPI HGLib_SetDeviceParam(HGLibDevice device, const HGChar* option, const HGVoid* data)
2022-07-19 03:51:00 +00:00
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return HGFALSE;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
2022-08-18 10:42:57 +00:00
return deviceImpl->SetParam(option, data);
}
2022-07-19 03:51:00 +00:00
HGLibDeviceGetParamGroup* HGAPI HGLib_GetDeviceParamGroupList(HGLibDevice device, HGUInt* count)
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return NULL;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->GetParamGroupList(count);
2022-07-19 03:51:00 +00:00
}
HGLibDeviceGetParam* HGAPI HGLib_GetDeviceParam(HGLibDevice device, const HGChar* option)
{
if (NULL == device)
{
return NULL;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->GetParam(option);
}
2022-07-19 03:51:00 +00:00
HGBool HGAPI HGLib_ReleaseDeviceParamGroupList(HGLibDeviceGetParamGroup* paramGroup, HGUInt count)
{
2022-07-19 09:09:52 +00:00
return HGLibDeviceImpl::ReleaseParamGroupList(paramGroup, count);
2022-07-19 03:51:00 +00:00
}
HGBool HGAPI HGLib_ReleaseDeviceParam(HGLibDeviceGetParam* param)
{
return HGLibDeviceImpl::ReleaseParam(param);
}
2022-07-19 03:51:00 +00:00
HGBool HGAPI HGLib_ResetDeviceParam(HGLibDevice device)
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return HGFALSE;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->ResetParam();
2022-07-19 03:51:00 +00:00
}
HGBool HGAPI HGLib_StartDeviceScan(HGLibDevice device, HGLibDeviceScanEventFunc eventFunc, HGPointer eventParam,
HGLibDeviceScanImageFunc imageFunc, HGPointer imageParam)
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return HGFALSE;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->StartScan(eventFunc, eventParam, imageFunc, imageParam);
2022-07-19 03:51:00 +00:00
}
HGBool HGAPI HGLib_StopDeviceScan(HGLibDevice device)
{
2022-07-19 09:09:52 +00:00
if (NULL == device)
{
return HGFALSE;
}
HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device;
return deviceImpl->StopScan();
2022-07-20 09:10:37 +00:00
}