扫描软件提示Video Initialize Error
1. 问题描述
win10或win11下使用HP扫描软件(scan to
)时,经常出现Video initialize Error
提示。
2. 处理步骤
2.1 检查硬件
通常出现问题的是扫描复印一体机。所以先测试复印功能,确认机器硬件是否正常。
如果复印没问题,排除掉打印机自身问题,考虑的是通讯和系统.
2.2 检查连接
测试打印功能,如果能正常执行打印任务,说明数据通信正常。
如果是通过网络连接,尝试关闭防火墙后测试。
2.3 检查服务
检查计算机 Windows Image Acquisition (WIA)
服务是否开启,并重启该服务后尝试扫描。
2.4 测试windows内置扫描软件
使用(windows 传真和扫描
)软件进行扫描测试,如果还是不行,尝试重新安装驱动。
如果可以正常扫描说明是这个软件导致twain协议占用,处理也很简单:
删除C:\Windows\twain_32
目录下除去你所使用的扫描仪型号之外的所有文件夹。
重启系统即可正常使用scan to
。
3. 补充知识【twain协议】
TWAIN定义了图像设备(扫描仪,数码相机)和应用之间相互通信的协议,各个设备厂商通过支持TWAIN协议使得上层应用可以用同样的代码去访问不同扫描仪。
TWAIN主要包括三个要素:
- Application - 使用TWAIN的图像应用,如Photoshop,
- Source Manager - 用来管理数据源和应用之间的交互,这个模块由TWAIN Group来维护,并提供开源代码(https://github.com/twain/twain-dsm)。windows提供默认实现TWAIN32.dll但是只支持到1.7版本,这个版本最早是存在于windows98 和NT5.0,直到今天也没升级过。 通常application或source安装时应该提供更新版本,下载最新代码编译后的版本号是2.4,最终二进制文件如下
1
2
3Winddows:TWAINDSM.dll
Mac:Twain.framework
Linux:/usr/local/lib/libtwaindsm.so - Data Source - 主要用于控制图像设备,这块主要由硬件厂商开发,目前TWAIN协议最新版本号是2.4。对于TWAIN来说,版本2.0是个分水岭(于2010年制定),这个版本定义了图像设备允许支持windows,Mac,Linux,并可以允许在x86和x64位系统,目前来说很多硬件厂商都没有对TWAIN Source升级到2.x,所以一般来说应用程序遵循1.x标准也可以使用大多数扫描仪。
通信接口
三个要素之间通信通过DSM_Entry()和DS_Entry()两个接口
开发TWAIN应用
应用程序无法直接操作source,所有对source的请求都是通过Source Manager完成DSM_Entry(),根据TWAIN协议推荐,所有的TWAIN命令调用最好在同一个线程完成。
当应用使用TWAIN 1.x时,需要提供一个windows句柄接收source的事件
1 |
|
pOrigin - 应用程序信息
pDest - 目标信息,如果是Source Manager,是NULL,如果是Source,则为这个Source的Identity
DG- 操作数据组
DAT -操作数据类型
MSG-消息ID
其中DG/DAT/MSG称为twain的操作组
twain session
操作扫描仪需要在session内完成,每个TWAIN session包括7个状态,不同的状态使用不同操作组对source操作和状态转移,应用程序应该遵循状态对source进行操作。但TWAIN并不强制要求每个source按照state1到state7的步骤进行状态转移,比如很多程序在load sourcemanager(state 3)后暂停,然后重复state4-state7(重复选择扫描仪进行扫描)
State 1 to 2 -加载source manager 获取 DSM_Entry接口
State 2 to 3 - 打开source manager
State 3 - 选择 Source
State 3 to 4 - 打开 Source
State 4 - 设置source的capacity
State 4 to 5 - 请求从source获取数据
State 5 to 6 - 数据可以准备消息
State 6 to 7 - 开始数据传输
State 7 to 6 to 5 - 完成传输
State 5 to 1 - 断开连接
停止扫描两种方法
- MSG_STOPFEDDER -发送停止扫描命令,,扫描仪会将扫描过的图片发过来
- MSG_RESET -发送停止扫描命令,,扫描仪不会将扫描过的图片发过来,调完这个命令后,TWAIN状态将直接到SourceEnabled