通用连接扫描仪文档

通用连接扫描仪文档

不同厂家扫描仪基本都支持twain接口,所以只需要调取twain接口中的方法即可实现控制各个扫描仪。

首先,用c++来调用twain接口实现扫描功能并写好方法供外部调用,然后把该c++程序编译成dll文件,最后用java程序通过jna或者jni的方式调用dll文件中已经暴露的接口方法完成通过java控制扫描仪的流程。

用c++来调用twain接口实现扫描功能并写好方法供外部调用,通过 https://blog.csdn.net/a1101000099/article/details/38561365提供的源码,对其进行改造成dll程序,然后把其中的方法改造的符合自己需求即可。

       在c++程序中,scanInterface.cpp里面的方法是用来调用TwainCpp.cpp里面的方法,如果想让java代码调用scanInterface.cpp的方法,需要把此方法写到scanInterface.h头文件中。

图中的callTwAcq和queryTw方法就是暴露给java,供java调用的。

 

1、queryTw方法是用来查找有几个扫描仪的方法

在java中需要这样调用

Pointer对象中就放着返回值,字符串类型的返回值要这样来接,否则会出现乱码的情况。参考的博客地址:https://blog.csdn.net/troylemon/article/details/46804127/

2、callTwAcq方法主要是设置参数并进行扫描。

其中的size值,代表的是扫描采用的纸张大小,纸张大小和size的对应值如下所示:

另外代码中的10000和20000并不代表任何纸张大小,而是分别代表原稿模式和手动设置纸张大小,并不是twain接口规定的,只是个人的逻辑处理。

无论size是几,最后都调用了Acquire方法(3个方法基本相同,只是不同的模式设置的参数会有不同,所以把方法分开写,以Acquire方法为例)

 

参数的设置分别对应什么功能有一篇博客已经做出了整理,地址:https://blog.csdn.net/pamxy/article/details/8629213,或者百度关键字“Twain Capabilities”。

设置参数最主要的两个方法,SetCap和SetBOOLCap,一个是设置数字的参数,另一个是设置BOOL型参数。

 

在java一端,没有什么特别的写法,主要是按照需求传参即可,唯一需要注意的一点就是java的参数类型要和c++一端的参数类型需要对上。下面附上一部分参数对照博客地址:https://blog.csdn.net/abc6368765/article/details/77842066

 

另外c++程序中有一些特别处理的地方,在此列出。

1.      扫描仪自动生成的图片为bmp图片,jpg图片是有bmp图片转的,这个bmp图片固定为temp.bmp。

2.      由java传过来的path参数,是以’\\’结尾的路径,在此处对最后一个’\\’做了截取,之后的部分全部截掉,因为在有java传到c++中的时候因为未知原因会出现乱码,暂时不知道什么原因,所以在此将后面的部分全部截掉。

3.      在saveDIB之后把bmp图片删除。(把bmp转成jpg的方法就在saveDIB中调用)