code_app/sdk/oldwebscan/hgscannersdk/HG_SCANNER_API.h

463 lines
18 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef WRRPER_SANE_SCANNER_H
#define WRRPER_SANE_SCANNER_H
/*********************************************************************************************
*时间2021年2月5日 *
*说明: *
* 此模块为将C++设备通信层以及图像处理层代码进行封装封装为C 接口的代码,以整合 *
*SANE*到SANE接口中 *
*一下做以调用流程说明: *
* GetInstance 创建此模块对象 *
* ↓↓ *
* Open() 打开USB端口 *
* ↓↓ *
* Start() 开始扫描 *
* ↓↓ *
* Get_Image_Info() 获取图像队列最前端图像信息,申请内存pdata *
* ↑ → → → ↓ *
* ↑Get_ProcedImgQueueEmpty() ↓当已处理图像队列不为空的时候循环此流程 *
* ↑ ↓ 取图 *
* ↑ ← ← ← ↓ *
* AquireImage(pdata) 传图图像指针,获取图像数据 *
* ↓↓ *
* ReleaseInstance() 删除释放相关资源,此处不用调用Close()接口,内部已做处理 *
* *
**********************************************************************************************/
typedef void* HG_Scanner_Handle;
#ifdef __cplusplus
extern "C" {
#endif
//#ifdef WIN32
// #ifdef DLL_HG_SCHANNER_EXPORTS
// #define DLL_HG_SCHANNER_API extern "C" _declspec(dllexport)
// #else
// #define DLL_HG_SCHANNER_API extern "C" _declspec(dllimport)
// #endif
//#else
// #define DLL_HG_SCHANNER_API
//#endif
#ifdef __linux__
#define DLL_HG_SCHANNER_API
#else
#define DLL_HG_SCHANNER_API extern "C" _declspec(dllexport)
#endif
/* 幅面枚举类型 */
typedef enum
{
HG_None = 0,
HG_A4Letter = 1,
HG_A4 = 1,
HG_B5Letter = 2,
HG_JISB5 = 2,
HG_B5 = 2,
HG_USLetter = 3,
HG_USLegal = 4,
HG_A5 = 5,
HG_B4 = 6,
HG_ISOB4 = 6,
HG_B6 = 7,
HG_ISOB6 = 7,
HG_USLedger = 9,
HG_USExecutive = 10,
HG_A3 = 11,
HG_B3 = 12,
HG_ISOB3 = 12,
HG_A6 = 13,
HG_C4 = 14,
HG_C5 = 15,
HG_C6 = 16,
HG__4A0 = 17,
HG__2A0 = 18,
HG_A0 = 19,
HG_A1 = 20,
HG_A2 = 21,
HG_A7 = 22,
HG_A8 = 23,
HG_A9 = 24,
HG_A10 = 25,
HG_ISOB0 = 26,
HG_ISOB1 = 27,
HG_ISOB2 = 28,
HG_ISOB5 = 29,
HG_ISOB7 = 30,
HG_ISOB8 = 31,
HG_ISOB9 = 32,
HG_ISOB10 = 33,
HG_JISB0 = 34,
HG_JISB1 = 35,
HG_JISB2 = 36,
HG_JISB3 = 37,
HG_JISB4 = 38,
HG_JISB6 = 39,
HG_JISB7 = 40,
HG_JISB8 = 41,
HG_JISB9 = 42,
HG_JISB10 = 43,
HG_C0 = 44,
HG_C1 = 45,
HG_C2 = 46,
HG_C3 = 47,
HG_C7 = 48,
HG_C8 = 49,
HG_C9 = 50,
HG_C10 = 51,
HG_USStatement = 52,
HG_MaxSize = 54
}HG_PAPERTYPE;
/* 除色类型 */
typedef enum hg_tagFilter
{
HG_FILTER_RED, /* 除红色 */
HG_FILTER_GREEN, /* 除绿色 */
HG_FILTER_BLUE, /* 除蓝色 */
HG_FILTER_NONE, /* 无除色 */
HG_FILTER_ALL, /* 全除色 */
HG_ENHANCE_RED, /* 红色增强 */
HG_ENHANCE_GREEN, /* 绿色增强 */
HG_ENHANCE_BLUE /* 蓝色增强 */
}HG_FILTER;
/* 扫描色彩 */
typedef enum
{
HG_BlackWhite, /* 黑白 */
HG_Gray, /* 灰度 */
HG_RGB /* 彩色 */
}HG_COLORMODE;
/* 多流输出类型 */
typedef enum {
HG_Unused = -1, /* 无 */
HG_All, /* 彩色+灰度+黑白 */
HG_ColorGray, /* 彩色+灰度 */
HG_ColorBw, /* 彩色+黑白 */
HG_GrayBw /* 灰度+黑白 */
}HG_MULTIOUTPUT;
/* 页面方向 */
typedef enum {
HG_Rot0 = 0, /* 纵向 */
HG_Rot270 = 3 /* 横向 */
}HG_PAPERALIGN;
/* 滤镜类型 */
typedef enum
{
HG_STNone, /* 无滤镜 */
HG_Sharpen, /* 锐化 */
HG_SharpenMore, /* 锐化加强 */
HG_Blur, /* 模糊 */
HG_BlurMore /* 模糊加强 */
}HG_SHARPENTYPE;
/* 旋转类型 */
typedef enum
{
HG_ROTATE_NONE = 0, /* 无旋转 */
HG_ROTATE_90, /* 旋转逆时针90度 */
HG_ROTATE_180, /* 旋转180度 */
HG_ROTATE_270, /* 旋转顺时针90度 */
HG_AUTOTEXT_DETECT /* 文稿方向识别 */
}HG_ORENTATION;
/* 设备状态 */
typedef enum
{
HG_STATUS_SCANNING = 1, /* 正在扫描 */
HG_STATUS_SCANSTOP, /* 扫描停止 */
HG_STATUS_NO_FEED, /* 无纸 */
HG_STATUS_COVEROPEN, /* 开盖 */
HG_STATUS_FEED_IN_ERROR, /* 馈纸错误 */
HG_STATUS_PAPER_JAM, /* 卡纸 */
HG_STATUS_DETECT_STAPLE, /* 订书钉 */
HG_STATUS_DETECT_DOUBLE_FEED, /* 双张 */
HG_STATUS_DETECT_SIZECHECKERROR, /* 尺寸检测错误 */
HG_STATUS_PAPER_SKEW, /* 纸张歪斜 */
HG_STATUS_USBCONNECT, /* 设备已连接 */
HG_STATUS_USBDISCONNECT, /* 设备未连接 */
HG_STATUS_USBERROR, /* USB错误 */
HG_STATUS_TIMEOUT, /* 取图超时 */
HG_STATUS_DOGEAR, /* 检查到折角 */
HG_STATUS_AQULRE_ERROR, /* 扫描仪取图错误 */
HG_STATUS_COUNTMODE, /* 计数模式 */
HG_STATUS_SLEEP, /* 设备休眠中 */
}HG_STATUSCODE;
/*缓存文件格式*/
typedef enum {
HG_CJPG,
HG_CPNG,
HG_CBMP,
HG_CTIFF
}HG_CACHEIMGFORMAT;
/* 扫描图像保存模式 */
typedef enum
{
HG_XFERMEMORY, /* 内存保存图像信息 */
HG_XFERFILE /* 图像文件保存图像信息 */
}HG_TRANSFERMODE;
/* 除穿孔参数 */
typedef struct
{
int enable; /* 使能开启该功能为true关闭该功能为false */
int ratio; /* 穿孔搜索范围从边缘到页面中心比例1~50对应1%~50% */
}HG_FILLHOLE;
/* 硬件参数 */
typedef struct
{
int capturepixtype; /* 颜色模式 */
int doubleFeedDetection; /* 双张检测 */
int bindingDetection; /* 订书钉检测 */
}HG_HARDWARECAPS;
/* 跳过空白页(与对折功能互斥) */
typedef struct
{
int Duplex; /* 1: both ; 0: front */
int DiscardBlank; /* 跳过空白页通用 0:disable 1: enbale */
int DiscardBlankVince; /* 跳过空白页发票0:disable 1: enbale */
int Fold; /* 对折 0:disable 1: enbale */
int SwitchFrontBack; /* 互换正反面 0:disable 1: enbale */
}HG_SCANSIDE;
/* 图像数据 */
typedef struct
{
unsigned int width; /* 像素宽度 */
unsigned int height; /* 像素高度 */
unsigned int bitdepth; /* 位深 */
unsigned char* pimgdata; /* 数据指针 */
unsigned int bytesperline; /* 每行数据长度 */
unsigned int bufferlength; /* 数据总长度 */
}HG_IMG;
/* 图像处理 */
typedef struct
{
int AutoCrop; /* 自动裁剪尺寸 */
int Brightness; /* 1~255 */
int Contrast; /* 1~7 */
float Gamma; /* 0.1f~5.0f */
int FillBlackRect; /* 消除黑框 */
int AutoDescrew; /* 自动纠偏 */
int RefuseInflow; /* 防止渗透 */
HG_FILLHOLE FillHole; /* 填穿孔参数 */
HG_FILTER Filter; /* 除色与颜色增强 */
int ColorCorrection; /* 色彩校正 */
int RemoveMorr; /* 去除摩尔纹 */
int ErrorExtention; /* 错误扩散 */
int NosieDetach; /* 噪点优化 */
int NosieDetachEnable;
int TextureRemove; /* 除网纹 */
int Indent; /* 边缘缩进像素 */
int Noise; /* 降噪像素点 */
int AutoCrop_threshold; /* 自动裁剪二值化阀值 */
bool Is_convex; /* 填充黑框方式 */
HG_SHARPENTYPE SharpenType; /* 滤镜类型 */
int MultiOutFilterRed; /* 多流输出除红 */
int AnswerSheetFilterRed; /* 答题卡除红 */
HG_ORENTATION Orentation; /* 图像旋转 */
int BackRotate180; /* 背面旋转180 */
int SplitImage; /* 图像拆分 */
int DiscardBlankThre; /* 跳过空白页阈值*/
}HG_IMAGEPROCESS;
/* 扫描参数 */
typedef struct
{
HG_COLORMODE PixelType; /* 色彩:彩色/灰度/黑白 */
HG_MULTIOUTPUT MultiOutput; /* 多流输出:彩色+灰度+黑白 */
HG_PAPERTYPE PaperSize; /* 幅面 */
HG_PAPERALIGN PaperAlign; /* 文档方向 */
HG_CACHEIMGFORMAT CacheFormat; /* 缓存图像格式*/
int Resolution; /* 分辨率100/150/200/300/600 */
HG_SCANSIDE ScanSide; /* 正反面:正面/正反双面 */
HG_IMAGEPROCESS ImageProcess; /* 图像处理 */
HG_HARDWARECAPS HardwareParam; /* 硬件参数 */
}HG_SCANPARAMS;
/// <summary>
/// 获取图像回调函数
/// </summary>
/// <param name="img">[in]图像数据结构体</param>
typedef void(*HG_OnImage_Callback)(HG_IMG* img, void* obj);
/// <summary>
/// 设备状态变更回调函数
/// </summary>
/// <param name="statuscode">[in]设备状态</param>
typedef void(*HG_OnDevice_Event_Callback)(HG_STATUSCODE statuscode, void* obj);
/// <summary>
/// 初始化设备。该功能在整个扫描流程最开始调用,且仅需调用一次
/// </summary>
DLL_HG_SCHANNER_API void HG_Init();
/// <summary>
/// 设置图像格式 .png .jpg
/// </summary>
DLL_HG_SCHANNER_API void HG_ImgSaveType(const char* img_type);
/// <summary>
/// 获取当前电脑连接的华高扫描仪设备列表
/// </summary>
/// <param name="strSeperator">[in]分隔符</param>
/// <returns>成功返回以 szSeperator 分隔的设备列表; 无设备返回 NULL。</returns>
DLL_HG_SCHANNER_API char* HG_GetDevices(char* strSeperator);
/// <summary>
/// 打开PC端 USB端口并激活
/// </summary>
/// <param name="scannername">[in]设备名称。可通过HG_GetDevices获得</param>
/// <returns>成功返回设备句柄失败返回NULL</returns>
DLL_HG_SCHANNER_API HG_Scanner_Handle HG_OpenScanner(char* scannername);
/// <summary>
/// 关闭USB端口
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
DLL_HG_SCHANNER_API void HG_CloseScanner(HG_Scanner_Handle pScanner);
/// <summary>
/// 获取扫描参数
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <param name="param">[out]扫描参数指针</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_Get_Scan_Params(HG_Scanner_Handle pScanner, HG_SCANPARAMS* param);
/// <summary>
/// 配置扫描参数
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <param name="param">[in]扫描参数</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_Set_Scan_Params(HG_Scanner_Handle pScanner, HG_SCANPARAMS param);
/// <summary>
/// 开始扫描
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <param name="count">[in]扫描张数。-1位连续扫描≥1为指定页数扫描</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_StartScan(HG_Scanner_Handle pScanner, int count);
/// <summary>
/// 停止扫描
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_StopScan(HG_Scanner_Handle pScanner);
/// <summary>
/// 获取扫描仪扫描状态
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <returns>正在扫描返回非零反之返回0</returns>
DLL_HG_SCHANNER_API int HG_Is_Running(HG_Scanner_Handle pScanner);
/// <summary>
/// 检测纸槽是否有纸
/// </summary>
/// <param name="pScanner">[in]设备句柄</param>
/// <returns>返回0为无纸返回1为有纸;返回-1为异常</returns>
DLL_HG_SCHANNER_API int HG_Is_FeederLoaded(HG_Scanner_Handle pScanner);
/// <summary>
/// 注册获取图像回调接口
/// </summary>
/// <param name="onimg_callback">[in]图像获取回调函数指针</param>
DLL_HG_SCHANNER_API void HG_Set_AquireImg_callback(HG_OnImage_Callback onimg_callback, void* obj = nullptr);
/// <summary>
/// 注册获取设备状态变更回调接口
/// </summary>
/// <param name="onevent_callback">[in]设备状态变更回调函数指针</param>
DLL_HG_SCHANNER_API void HG_Set_OnDeviceEvent_callback(HG_OnDevice_Event_Callback onevent_callback, void* obj = nullptr);
/// <summary>
/// 创建多页文档。包括PDF和OFD两种格式
/// </summary>
/// <param name="srcFiles">[in]图片名称</param>
/// <param name="srcNum">[in]srcFiles包含图片名称数量</param>
/// <param name="dstFile">[in]合成文档名称。根据 后缀名判定合成格式</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_Create_MultiPageDocument(char** srcFiles, int srcNum, char* dstFile);
/// <summary>
/// 创建多页tiff。
/// </summary>
/// <param name="srcFiles">[in]图片名称</param>
/// <param name="srcNum">[in]srcFiles包含图片名称数量</param>
/// <param name="dstFile">[in]合成tiff名称。根据 后缀名判定合成格式</param>
/// <returns>成功返回0失败返回非0</returns>
DLL_HG_SCHANNER_API int HG_Create_MultiTiff(char** srcFiles, int srcnum, char* dstFile);
/// <summary>
/// 获取SDK版本信息
/// </summary>
/// <returns></returns>
DLL_HG_SCHANNER_API char* HG_GetSDKVersion();
/// <summary>
/// 获取序列号
/// </summary>
/// <returns></returns>
DLL_HG_SCHANNER_API const char* HG_GetSerialNum(HG_Scanner_Handle pScanner);
/// <summary>
/// 获取固件版本号
/// </summary>
/// <returns></returns>
DLL_HG_SCHANNER_API const char* HG_GetFwVersion(HG_Scanner_Handle pScanner);
/// <summary>
/// 获取扫描仪是否在睡眠模式当中
/// </summary>
/// <returns>-1:设备未初始化 0:设备已唤醒 1:唤醒失败</returns>
DLL_HG_SCHANNER_API int HG_GET_IS_SLEEP_STATUS(HG_Scanner_Handle pScanner);
/// <summary>
/// 重启设备 重启设备后usb io会被释放所以需要从新进行初始化
/// </summary>
/// <returns>-1:非正常;1:重启设备</returns>
DLL_HG_SCHANNER_API int HG_REBOOT_DEVICE(HG_Scanner_Handle pScanner);
/// <summary>
/// 根据 HG_ImgSaveType 设置图像压缩率默认JPG
/// 设置图像压缩率JPG 默认80 格式:1-100 值越小压缩比例越高,图像质量越低。
/// 设置图像压缩率PNG 默认30) 格式:10的整数倍10 20 30....100 值越大压缩比例越低,图像质量越高。
/// C#调用时 使用bitmap 请自行压缩
/// </summary>
/// <returns>NULL</returns>
DLL_HG_SCHANNER_API void HG_SET_IMG_COMPRESSION(unsigned int compressiondata);
/// <summary>
/// 画质优先,速度优先
/// 画质优先:保持高清的图像,损失出图速度。速度优先反之
/// compressiondata default:true--->画质优先 false 速度优先
/// </summary>
/// <returns>成功:true 失败:false</returns>
DLL_HG_SCHANNER_API bool HG_Set_Img_Quality(HG_Scanner_Handle pScanner, bool compressiondata = true);
/// <summary>
/// 转换tiff G4无压缩图像 支持24位图和8位图 注意:此方法会随损失出图的效率
/// m_tmppath:图像路径
/// </summary>
/// <returns>成功:true 失败:false</returns>
DLL_HG_SCHANNER_API bool G4TiffSave(char* m_tmppath);
#ifdef __cplusplus
}
#endif
#endif