#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; /// /// 获取图像回调函数 /// /// [in]图像数据结构体 typedef void(*HG_OnImage_Callback)(HG_IMG* img, void* obj); /// /// 设备状态变更回调函数 /// /// [in]设备状态 typedef void(*HG_OnDevice_Event_Callback)(HG_STATUSCODE statuscode, void* obj); /// /// 初始化设备。该功能在整个扫描流程最开始调用,且仅需调用一次 /// DLL_HG_SCHANNER_API void HG_Init(); /// /// 设置图像格式 .png .jpg /// DLL_HG_SCHANNER_API void HG_ImgSaveType(const char* img_type); /// /// 获取当前电脑连接的华高扫描仪设备列表 /// /// [in]分隔符 /// 成功返回以 szSeperator 分隔的设备列表; 无设备返回 NULL。 DLL_HG_SCHANNER_API char* HG_GetDevices(char* strSeperator); /// /// 打开PC端 USB端口并激活 /// /// [in]设备名称。可通过HG_GetDevices获得 /// 成功返回设备句柄;失败返回NULL DLL_HG_SCHANNER_API HG_Scanner_Handle HG_OpenScanner(char* scannername); /// /// 关闭USB端口 /// /// [in]设备句柄 DLL_HG_SCHANNER_API void HG_CloseScanner(HG_Scanner_Handle pScanner); /// /// 获取扫描参数 /// /// [in]设备句柄 /// [out]扫描参数指针 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_Get_Scan_Params(HG_Scanner_Handle pScanner, HG_SCANPARAMS* param); /// /// 配置扫描参数 /// /// [in]设备句柄 /// [in]扫描参数 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_Set_Scan_Params(HG_Scanner_Handle pScanner, HG_SCANPARAMS param); /// /// 开始扫描 /// /// [in]设备句柄 /// [in]扫描张数。-1位连续扫描;≥1为指定页数扫描 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_StartScan(HG_Scanner_Handle pScanner, int count); /// /// 停止扫描 /// /// [in]设备句柄 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_StopScan(HG_Scanner_Handle pScanner); /// /// 获取扫描仪扫描状态 /// /// [in]设备句柄 /// 正在扫描返回非零;反之返回0 DLL_HG_SCHANNER_API int HG_Is_Running(HG_Scanner_Handle pScanner); /// /// 检测纸槽是否有纸 /// /// [in]设备句柄 /// 返回0为无纸;返回1为有纸;返回-1为异常 DLL_HG_SCHANNER_API int HG_Is_FeederLoaded(HG_Scanner_Handle pScanner); /// /// 注册获取图像回调接口 /// /// [in]图像获取回调函数指针 DLL_HG_SCHANNER_API void HG_Set_AquireImg_callback(HG_OnImage_Callback onimg_callback, void* obj = nullptr); /// /// 注册获取设备状态变更回调接口 /// /// [in]设备状态变更回调函数指针 DLL_HG_SCHANNER_API void HG_Set_OnDeviceEvent_callback(HG_OnDevice_Event_Callback onevent_callback, void* obj = nullptr); /// /// 创建多页文档。包括PDF和OFD两种格式 /// /// [in]图片名称 /// [in]srcFiles包含图片名称数量 /// [in]合成文档名称。根据 后缀名判定合成格式 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_Create_MultiPageDocument(char** srcFiles, int srcNum, char* dstFile); /// /// 创建多页tiff。 /// /// [in]图片名称 /// [in]srcFiles包含图片名称数量 /// [in]合成tiff名称。根据 后缀名判定合成格式 /// 成功返回0;失败返回非0 DLL_HG_SCHANNER_API int HG_Create_MultiTiff(char** srcFiles, int srcnum, char* dstFile); /// /// 获取SDK版本信息 /// /// DLL_HG_SCHANNER_API char* HG_GetSDKVersion(); /// /// 获取序列号 /// /// DLL_HG_SCHANNER_API const char* HG_GetSerialNum(HG_Scanner_Handle pScanner); /// /// 获取固件版本号 /// /// DLL_HG_SCHANNER_API const char* HG_GetFwVersion(HG_Scanner_Handle pScanner); /// /// 获取扫描仪是否在睡眠模式当中 /// /// -1:设备未初始化 0:设备已唤醒 1:唤醒失败 DLL_HG_SCHANNER_API int HG_GET_IS_SLEEP_STATUS(HG_Scanner_Handle pScanner); /// /// 重启设备 重启设备后usb io会被释放所以需要从新进行初始化 /// /// -1:非正常;1:重启设备 DLL_HG_SCHANNER_API int HG_REBOOT_DEVICE(HG_Scanner_Handle pScanner); /// /// 根据 HG_ImgSaveType 设置图像压缩率(默认JPG) /// 设置图像压缩率JPG (默认80) 格式:1-100 值越小压缩比例越高,图像质量越低。 /// 设置图像压缩率PNG (默认30) 格式:10的整数倍10 20 30....100 值越大压缩比例越低,图像质量越高。 /// C#调用时 使用bitmap 请自行压缩 /// /// NULL DLL_HG_SCHANNER_API void HG_SET_IMG_COMPRESSION(unsigned int compressiondata); #ifdef __cplusplus } #endif #endif