栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux下调用扫描仪sane协议

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux下调用扫描仪sane协议

Sane是linux下调用扫描仪的通用协议,要使用的话需要先在电脑上/usr/lib/或者/usr/local/lib/下安装libsane.so文件。其调用过程如下:
1.初始化 2.查找设备 3.打开设备 4.设置参数 5.开始扫描 6.保存图像 7.取消扫描 8.关闭设备 9.释放资源。

以下介绍均基于sane.h。
首先对用到的sane定义的枚举数据类型进行介绍:
SANE_Status:
sane的状态结果,用到的有SANE_STATUS_GOOD = 0表示操作成功
SANE_STATUS_EOF=5,一张纸数据读取结束。(sane_read返回结果)
SANE_STATUS_NO_DOCS=7,表示没有文档或者是白页。(sane_start的返回结果)

SANE_Value_Type:
sane的参数数据类型,主要使用SANE_TYPE_BOOL、SANE_TYPE_INT、SANE_TYPE_FIXED、和SANE_TYPE_STRING四种。
需要注意的是,如果数据类型是SANE_TYPE_FIXED,调用sane_control_option设置参数时,要先用SANE_FIX函数做转化,即左移16bit。

#define SANE_FIXED_SCALE_SHIFT	16
#define SANE_FIX(v)	((SANE_Word) ((v) * (1 << SANE_FIXED_SCALE_SHIFT)))

SANE_Unit:
sane参数的单位,这个类型基本没用到。有SANE_UNIT_PIXEL像素、SANE_UNIT_DPI分辨率、SANE_UNIT_MM毫米等。

SANE_Device:
sane设备结构体,name是设备名字(最重要,需要根据name打开设备)。
Vendor、model、type分别是该设备的制造厂商,设备型号和设备类型,没多大用。

SANE_Constraint_Type:
没理解,没用到。

SANE_Range:
该设备支持的sane参数的描述,分别是最小值、最大值和步进量。比如分辨率resolution:该设备支持min最小值75、max最大值1200、quant每次可微调1.

SANE_Option_Descriptor:
sane参数描述,对参数的名字、功能等进行描述。

SANE_Action:
sane对参数进行的操作(很重要)。
SANE_ACTION_GET_VALUE 获取参数值
SANE_ACTION_SET_VALUE 设置参数值
SANE_ACTION_SET_AUTO 设置参数值自动(不常用)

SANE_Frame;
扫描的图像数据类型,常用SANE_FRAME_GRAY灰度图像和SANE_FRAME_RGB彩色图像两种类型。

SANE_Parameters:
扫描仪扫描的图像数据描述,保存扫描图像时用到,很重要。
SANE_Int bytes_per_line; 图像每行数据的字节数,1byte=8bit
SANE_Int pixels_per_line; 图像每行有多少像素,图像的宽度
SANE_Int lines; 图像共有多少行,图像的高度
SANE_Int depth; 图像的深度,即用多少个bit表示一个像素点的值
举例:以图像宽高分别为1024像素和2048像素为例子,黑白图、灰度图和彩色图上述的值分别为

一、初始化

SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize);

二、查找设备

SANE_Status sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only);

三、打开设备

SANE_Status sane_open (SANE_String_Const devicename,SANE_Handle * handle);

四、设置参数

SANE_Status sane_control_option (SANE_Handle handle, SANE_Int option,SANE_Action action, void *value,SANE_Int * info);

Sane协议扫描仪的参数设置如下:
每家扫描仪厂商有自己的参数名字、参数取值。为了便于设置,在传给sane的时候,要设置哪个参数则传递这个参数的序号。
以设置分辨率(DPI)300为例:
Int value = 300;
影源的参数名字叫resolutionA 该厂商的参数序号为5,则调用时为

sane_control_option (SANE_Handle handle, 5 ,SANE_ACTION_SET_VALUE, &value,SANE_Int * info);

奔图的参数名字叫resolutionB 该厂商的参数序号为9,则调用时为

sane_control_option (SANE_Handle handle, 9 ,SANE_ACTION_SET_VALUE, &value,SANE_Int * info);

参数名和序号的对应关系需要自己维护。
另:序号为0的参数的值表示该扫描仪支持多少个参数,假设为n,则可以遍历n获取参数名对应的参数序号。
五、开始扫描

SANE_Status sane_start (SANE_Handle handle);

只需要调用一次扫描仪会将所有纸进行扫描,若要保存全部扫描数据,则需要重复调用,直到返回值不为0(正常结束返回值为7)

六、保存图像(读取图像数据)
需要自己实现将扫描数据保存为图像,调用的是sane的

SANE_Status sane_read (SANE_Handle handle, SANE_Byte * data,SANE_Int max_length, SANE_Int * length);

将读取到的图像数据和自定义的图像头数据一起组成新的buffer,生成图像。

七、结束扫描

void sane_cancel (SANE_Handle handle);

八、关闭设备

void sane_close (SANE_Handle handle);

九、释放资源

void sane_exit (void); 

附基于sane的扫描demo QT_SANE。
左边lineedit填写参数序号,如2(mode扫描模式)、3(resolution分辨率)等。
右边lineedit填写参数值,如Color、300等。


代码下载地址:https://github.com/ForrestSunhh/Sane
https://download.csdn.net/download/weixin_44462930/85223430
此外,也可以用scanimage命令来对扫描仪进行操作,具体用法可以百度。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号