实现32/64位Windows虚拟扫描仪自定义图片加载

大部分扫描仪都支持TWAIN协议,为了方便开发扫描仪应用程序,TWAIN组织在GitHub上放了虚拟扫描仪的示例代码。这份代码只支持加载自带的TWAIN图标,ADF连续扫描也不起作用。为了更真实的模拟扫描不同的图片,我们可以对源码做些修改。

文档扫描流程

修改代码之前,我们可以先了解下扫描文档的流程。虚拟扫描仪就是在source这层。
在这里插入图片描述

开发测试环境

开发

  • Visual Studio 2017及以上(官方提供了比较早的工程)
  • Qt 5.12.11 msvc2017或者Qt 5.12.11 msvc2017_64。这里取决于你要编译32位还是64位的程序

测试

编译及调试

编译工程

  1. 获取源码:

    git clone https://github.com/twain/twain-samples.git
    
  2. 设置系统变量QTDIR

    在这里插入图片描述

  3. 在系统PATH中添加:C:\Qt\5.12.11\msvc2017_64\bin。注意,如果你还添加了arm或者mingw,一定要保证msvc在最前面,不然通过windeployqt部署的时候,拿到的DLL是错误的。

  4. 管理员权限启动Visual Studio。导入工程之后编译。编译好会生成TWAINDS_Sample32.ds或者TWAINDS_Sample64.ds动态链接库,对应的输出路径分别是C:\Windows\twain_32\sample2\或者C:\Windows\twain_64\sample2\

现在用测试工具打开,应该可以看到扫描仪。点击扫描仪可以加载默认的图片。

调试程序

  1. 运行twacker。

  2. 在Visual Studio中挂载进程:

    在这里插入图片描述

  3. 挂载之后,执行扫描就会跳到断点。
    在这里插入图片描述

通过调试程序,我们可以了解源码的工作流程。接下来修改代码。

虚拟扫描仪加载自定义图片

通过调试发现,每次点击扫描,DLL都会被重新加载,所有的变量都会重置。要在内存中保留图片索引不行。解决方法是写一个配置文件。这里有另外一个问题就是windows目录下默认没有写权限,只有读权限。所以创建两个文件source.jsoninfo.json,一个放在windows目录下指定自定义图片的目录,一个放在图片目录中包含图片索引信息和一次最大扫描量(用于ADF)。

source.json:

{
   
    "folder": "C:/Users/admin/Pictures/barcode"
}

info.json

{
   
    "index": 0,
    "maxcount": 10
}

CScanner_FreeImage.cppresetScanner()函数中,我们读取自定义的配置文件。通过索引设置一张当前图片,然后更新索引,写回到配置文件中,用于下一次的扫描:

  char szTWAIN_DS_DIR[PATH_MAX];
  GetModuleFileName(g_hinstance
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值