#include "HGScannerLib.h" #include "base/HGInc.h" #include "base/HGImage.h" #include "imgfmt/HGImgFmt.h" #include "imgproc/HGOcr.h" #include "HGString.h" #include "HGLibDeviceImpl.hpp" typedef struct { HGUInt size; /* 结构体大小 */ HGUInt jpegQuality; /* jpeg下有效, 0-100 */ HGUInt tiffCompression; /* tiff下有效, HGLIB_TIFFCOMPRESSION_* */ HGUInt tiffJpegQuality; /* tiff且HGLIB_TIFFCOMPRESSION_JPEG下有效, 0-100 */ HGBool ocr; /* 是否OCR,pdf和ofd格式有效 */ }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) { return NULL; } HGBool HGAPI HGLib_CloseDevice(HGLibDevice device) { return HGFALSE; } HGBool HGAPI HGLib_SetDeviceParam(HGLibDevice device, const HGLibDeviceSetParam* param, HGUInt count) { return HGFALSE; } HGLibDeviceGetParamGroup* HGAPI HGLib_GetDeviceParamGroupList(HGLibDevice device, HGUInt* count) { return NULL; } HGBool HGAPI HGLib_ReleaseDeviceParamGroupList(HGLibDeviceGetParamGroup* paramGroup, HGUInt count) { return HGFALSE; } HGBool HGAPI HGLib_ResetDeviceParam(HGLibDevice device) { return HGFALSE; } HGBool HGAPI HGLib_StartDeviceScan(HGLibDevice device, HGLibDeviceScanEventFunc eventFunc, HGPointer eventParam, HGLibDeviceScanImageFunc imageFunc, HGPointer imageParam) { return HGFALSE; } HGBool HGAPI HGLib_StopDeviceScan(HGLibDevice device) { return HGFALSE; }