




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#使用Twain协议实现扫描仪连续扫描功能C#调用Twain接口实现扫描仪连续扫描。在监听的TwainCommand.TransferReady状态中,是调用扫描仪扫描图片的。我开始的时候尝试修改twain类中TransferPictures的方法,但是结果证实不可行。其实这是一个误区,我们只需要修改一下twain的启动扫描事件,可以根据是否连续扫描给扫描仪传不同的参数以达到此效果。只需一行代码,就可实现一次扫描多张,且不需要更改扫描仪的任何设置。
如果用Twain协议实现一次扫描多张图片?相信有接触过Twain协议与扫描仪通信的朋友都遇到过这样的问题。按照网上的例子,在连续送纸的扫描仪中,调用一次却只能扫描一张图片,怎么破?
关于这个问题我研究了好久,终于在困扰了我7天之后,我搞定了,下面分享一下我的解决经验。
新建一个ScanCommon类,在调用界面,写下调用扫描的方法:
ScanCommonscan=newRS_ScanCommon(fileName,this.Handle);
scan.PassDataBetweenForm+=newRS_ScanCommon.PassDataBetweenFormHandler(scan_PassDataBetweenForm);
//是否连续扫描
scan.bContinuousScan=true;
scan.dtRow=dtRow;
this.Enabled=false;
scan.StartScan();
在ScanCommon类中,调用Twain的接口类(Twain类网络上可以找到,本文略),主要代码如下:
//添加一个委托
publicdelegatevoidPassDataBetweenFormHandler(objectsender,PassDataEventArgse);
//添加一个PassDataBetweenFormHandler类型的事件
publiceventPassDataBetweenFormHandlerPassDataBetweenForm;
publicScanCommon(stringfileName,IntPtrHandle)
this.fileName=fileName;
this.Handle=Handle;
//扫描初始化(默认使用TWAIN方式进行连接)
tw=newTwain();
tw.Init(Handle,outrc);
//tw.Select();
//启动扫描
publicvoidStartScan()
if(rc!=TwRC.Success)
MessageBox.Show("设备初始化失败,请检查硬件及驱动!");
else
stringpath="XXX路径"+"\\ScannerFile\\"+frmName;
if(Scanning(path)==false)
MessageBox.Show("设备未找到或设备不支持TWAIN组件,无法自动创建扫描任务。");
//回调主窗口
PassDataEventArgsargs=newPassDataEventArgs("exit");
PassDataBetweenForm(this,args);
GC.Collect();
}
在ScanCommon类中,主要的扫描方法均可以通过调用twain类实现,Scanning是调用驱动实现扫描的方法。Application.AddMessageFilter是添加扫描仪的事件监听,在监听事件中返回扫描仪的不同状态以实现取消和扫描的一些操作。
主要代码如下:
#region扫描的一些方法
privateboolScanning(stringfilePath)
if(!msgfilter)
msgfilter=true;
Application.AddMessageFilter(this);
ScanPath=filePath;
returntw.Acquire(refstrScanErrorMessage,bContinuousScan);
///summary
///保存图片
////summary
///paramname="dibhandp"/param
privatevoidImageSave(IntPtrdibhandp)
bmprect=newRectangle(0,0,0,0);
if(dibhandp!=IntPtr.Zero)dibhand=dibhandp;
bmpptr=GlobalLock(dibhand);
pixptr=GetPixelInfo(bmpptr);
publicvoidEndingScan()
if(msgfilter)
tw.Finish();
RemoveMessageFilter(this);
msgfilter=false;
publicstaticvoidRemoveMessageFilter(IMessageFiltervalue)
Application.RemoveMessageFilter(value);
#endregion
在监听的TwainCommand.TransferReady状态中,是调用扫描仪扫描图片的。我开始的时候尝试修改twain类中TransferPictures的方法,但是结果证实不可行。
其实这是一个误区,我们只需要修改一下twain的启动扫描事件,可以根据是否连续扫描给扫描仪传不同的参数以达到此效果。
只需一行代码,就可实现一次扫描多张,且不需要更改扫描仪的任何设置。
如果设备支持连续送纸,启动扫描时扫描仪会直接连扫直到纸张全部扫完
//此行代码是连续扫描
TwCapabilitycap=newTwCapability(TwCap.XferCount,-1);
代码如下:
///summary
///启动扫描
////summary
///paramname="strScanErrorMessage"/param
///returns/returns
publicboolAcquire(refstringstrScanErrorMessage,boolMultiScan)
TwRCrc;
CloseSrc();
if(appid.Id==IntPtr.Zero)
Init(hwnd,outrc);
if(appid.Id==IntPtr.Zero)
strScanErrorMessage="未找到扫描仪设备,请查看是否安装扫描仪驱动!";
returnfalse;
rc=DSMident(appid,IntPtr.Zero,TwDG.Control,TwDAT.Identity,TwMSG.OpenDS,srcds);
if(rc!=TwRC.Success)
strScanErrorMessage="未找到扫描仪设备";
returnfalse;
if(MultiScan)
//如果是连续扫描
TwCapabilitycap=newTwCapability(TwCap.XferCount,-1);
rc=DScap(appid,srcds,TwDG.Control,TwDAT.Capability,TwMSG.Set,cap);
else
//否则只扫描一张
TwCapabilitycap=newTwCapability(TwCap.XferCount,1);
rc=DScap(appid,srcds,TwDG.Control,TwDAT.Capability,TwMSG.Set,cap);
if(rc!=TwRC.Success)
strScanErrorMessage="未找到扫描仪设备";
CloseSrc();
returnfalse;
TwUserInterfaceguif=newTwUserInterface();
guif.ShowUI=1;
guif.ModalUI=1;
guif.ParentHand=hwnd;
rc=DSuserif(appid,srcds,TwDG.Control,TwDAT.UserInterface,TwMSG.EnableDS,guif);
if(rc!=TwRC.Success)
strScanErrorMessage="扫描仪中没有纸";
CloseSrc();
GC.Collect();
returnfalse;
catch(Exceptione)
strScanErrorMessage=e.Message;
GC.Collect();
returnfalse;
GC.Collect();
returntrue;
}
扫描结束后,回调主窗口返回数据,主窗口添加如下事件:
privatevoidscan_PassDataBetweenForm(obje
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机器人行业智能机器人技术与应用政策支持方案
- 公共关系学创新传播案例分析及试题及答案
- 2025年企业负责人安全培训考试试题及参考答案【综合卷】
- 学习经济学的试题及答案指导
- 《移动互联网与增强现实技术应用案例》课件
- 2025-2030年防盗安全门行业市场发展分析及投资前景研究报告
- 2025-2030年运动鞋产品入市调查研究报告
- 2025-2030年车身广告行业发展分析及前景趋势与投资研究报告
- 2025-2030年超声波设备行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年网络控制设备行业市场深度调研及前景趋势与投资研究报告
- 外包加工安全协议书
- 提高混淆效果研究
- 烹饪专业考评员培训
- 常州大学《高分子材料的稳定与降解》2022-2023学年第一学期期末试卷
- 单片机 串行口通信实验
- 网络预约出租汽车驾驶员从业资格考试全国题题库(含答案)
- IT系统维保项目服务投标方案(技术标)
- 四年级下册综合实践活动教学设计-粮食知多少|教科版
- 河南省驻马店市2024年中考英语模拟试卷(含答案)
- 绿色建筑工程监理实施细则
- 药事管理与法规智慧树知到答案2024年石河子卫生学校
评论
0/150
提交评论