前言
对接扫描仪的几种方式:
TWAIN 此为大多数扫描仪基础协议。是C++语言写的底层dll,对.NET来说通过DLLImport来扩展使用。
此协议是很底层的协议,并没有经过.NET封装。所以要了解其机制才能更好的来开发。
WIA .NET已经封装了支持该协议的dll,但是WIA一次只能扫描一张。
相关文章:
https://blog.csdn.net/younghaiqing/article/details/78431454
https://www.likecs.com/show-503057.html
Twain方式1
TwainWin32.cs
1 | namespace Ztwain |
TwainDefs.cs
1 | namespace Ztwain |
TwainLib.cs
1 | namespace Ztwain |
TwainDibToBitmap.cs
1 | namespace Ztwain |
TwainWPF.cs
1 | namespace Ztwain |
调用方式
1 | using System; |
页面代码
1 | <Window |
图片保存
1 | using System; |
Twain方式2
这个库在部分扫描仪上有问题,不推荐使用。
添加引用
Nuget 添加依赖 NTwain
命令安装
1 | Install-Package NTwain -Version 3.7.4 |
Github网址
https://github.com/soukoku/ntwain
初始化
1 | private TwainSession session = null; |
DataSource可用以下的属性
int Id
如:349 每次重启应用的时候Id会变。string Name
如:Canon DR-M160 TWAINstring Manufacturer
如:Copyright CANON ELECTRONICS INC.string ProductFamily
如:Canon DR-M160 Driverbool IsOpen
如:False
对于双面扫描我们可以通过下面的方式来判断
每一页扫描都会先触发一次
Session_TransferReady
,之后触发两次Session_DataTransferred
,从而来判定一个页面的两面。
扫描
1 | private void Scanner_btn_Click(object sender, System.Windows.RoutedEventArgs e) |
其中第一个参数可以传如下的值
SourceEnableMode.ShowUI
显示扫描仪配置页面,并且能进行扫描。SourceEnableMode.NoUI
直接扫描不显示配置页面。SourceEnableMode.ShowUIOnly
只显示配置页面,不能扫描,一般和上面的配合使用。
图片处理
在Session_DataTransferred
回调中我们可以处理图片
获取扫描图片的地址
1 | private string GenerateFile(DataTransferredEventArgs e) |
获取扫描的缩略图
1 | private ImageSource GenerateThumbnail(DataTransferredEventArgs e) |
康佳扫描仪(官方COM)
使用厂家提供的开发COM组件,必须要安装两个东西
- 扫描仪驱动
- 开发包(附带COM组件)
添加COM引用
安装完驱动后
项目中添加啊COM引用TechHeroScanProj1
初始化
1 | private TechHeroScanProj1.TechHeroScan axTechHeroScan1 = null; |
选择扫描仪
1 | private void Select_btn_Click(object sender, System.Windows.RoutedEventArgs e) |
开始和错误回调
1 | axTechHeroScan1.OnBeforeScan += AxTechHeroScan1_OnBeforeScan; |
扫描
两种扫描方式使用一种即可,如果没有文件命名的需求建议直接使用内部重命名的方式。
内部重命名
1 | axTechHeroScan1.OnPageDone += AxTechHeroScan1_OnPageDone; |
手动重命名
1 | axTechHeroScan1.OnPageDoneDib += AxTechHeroScan1_OnPageDoneDib; |
WIA对接
在COM里导入
一般最近年头的扫描仪都支持这个协议。
错误代码
https://docs.microsoft.com/zh-cn/windows/win32/wia/-wia-error-codes
弹窗设置
1 | ImageFile imageFile = null; |