twain协议驱动下载.docx

上传人:b****3 文档编号:4230977 上传时间:2022-11-28 格式:DOCX 页数:10 大小:24.94KB
下载 相关 举报
twain协议驱动下载.docx_第1页
第1页 / 共10页
twain协议驱动下载.docx_第2页
第2页 / 共10页
twain协议驱动下载.docx_第3页
第3页 / 共10页
twain协议驱动下载.docx_第4页
第4页 / 共10页
twain协议驱动下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

twain协议驱动下载.docx

《twain协议驱动下载.docx》由会员分享,可在线阅读,更多相关《twain协议驱动下载.docx(10页珍藏版)》请在冰豆网上搜索。

twain协议驱动下载.docx

twain协议驱动下载

竭诚为您提供优质文档/双击可除

twain协议驱动下载

  篇一:

twain驱动详解

  twain驱动详解

  twain工作组是一个非盈利的国际组织。

它旨在提供一个统一的标准接口,通过该接口就可以实现应用程序与图像输入设备间的通讯。

其实该标准目前已经成为了应用程序与图像输入设备间通讯的事实标准。

  twain的文件组成

  twain共包括4个二进制文件。

如果要使用该接口,就必须要保证他们被成功地安装在本地计算机上。

  文件名

  twain_32.dll

  32位应用程序的支持文件,32位程序使用twain通讯必须使用该文件。

  twain.dll

  16位应用程序的支持文件,16位程序使用twain通讯必须使用该文件。

  twunkeR_32.exe

  实现32位应用程序与32位数据源进行通讯,它运行时不可见。

  twunkeR_16.exe

  实现32位应用程序与16位数据源进行通讯,它运行时不可见。

  注意:

在windowsnt环境下16位数据源不能够正常工作。

  在windows操作系统中(windows9x/2000/xp),microsoft已经把这些文件作为系统文件随同操作系统一起发布了。

你可以在windows安装目录中查找到这些文件。

如果我们要编程来实现对twain的访问,还需要最重要的头文件。

你通过访问该http:

//www.twain.org/devfiles/twain.h地址来获得twain提供的头文件。

  好了,现在就让我们来了解一下twain的结构吧。

  twain的结构

  twain依靠三个组件协同完成与图像设备的通讯和数据传输工作,这三个组件就是application、sourcemanager和source。

  组件

  说明

  application

  就是你要编写的应用程序。

  sourcemanager

  是由twain提供的一个source的管理器,它不仅可以收集本地系统已经安装了的图像设备,还可以根据需要去加载设备。

同时,它最重要的功能是担任application与source通讯的桥梁。

(其实,它就是我们前面提到的组成文件中的dll文件。

  source

  在这里可以看作是图像设备。

事实上它是由设备厂家提供的一个dll文件。

这个dll文件是支持twain接口的。

(该文不讨论关于twain在source中的应用。

  它们的层次结构图如下:

  从该图我们可以看到,application要从source获得图像数据,必须通过sourcemanager传递来实现。

application与sourcemanager间的通讯是靠调用twain提供的dsm_entry()函数实现。

而application不能直接与source通讯,sourcemanager与source间的通讯是靠调用twain提供的ds_entry()函数实现(在这里,我们不用关心sourcemanager如何去调用ds_entry函数。

)。

  twain的用户界面

  当我们使用twain接口去获得图像数据的时候,会涉及到一些的用户界面,首先是我们的应用程序界面,然后是sourcemanager提供的用户界面以及图像设备(source)所提供的用户界面。

  这些用户界面如下:

  在我们的应用程序中,可以通过“选择设备”来打开sourcemanager的标准用户界面。

sourcemanager的界面由sourcemanager提供。

在这个界面中可以让用户选择他想要使用的图像设备。

选中想要的设备后,再通过“获取”来打开图像设备(source)提供的用户界面进行现应的操作。

(注:

source提供的界面会因为你使用的图像设备不同而有差异。

)对于这些界面,twain提供了非常灵活的处理方法。

对于sourcemanager提供的用户界面以及图像设备(source)所提供的用户界面,我们可以选择是否显示它们,甚至我们还可以按自己的要求去改写这些用户界面。

  twain的接口函数

  要编写应用程序实现与支持twain标准的图像设备通讯,只需要了解上面提到的dsm_entry

  ()接口函数。

twain定义了大约140个操作消息。

你只要把这些消息通过dsm_entry()函数发给sourcemanager,就可以实现对选定的source进行相应的操作。

sourcemanager会分辨那些消息属于自己,那些消息是该转发给source。

  在介绍dsm_entry()前,我们先来了解一下的twain定义的消息格式。

twain把它定义的操作称为triplets操作,就是每个操作用三个定义的参数来表示。

这个三个参数用不同前缀名来区分。

每个triplets操作都是唯一的,不会有歧意,它们代表一个特定的操作行为。

这三个参数类型分别是datagroup(前缀名dg_)、dataargument(前缀名dat_)和messageid(前缀名msg_),每个参数都包含有各自的信息。

比如:

dg_contRol/dat_paRent/msg_opendsm就表示一个打开sourcemanager的操作,这些参数在twain.h中都有定义。

其他的操作(设置扫描仪的分辨率、获得设备支持的功能等等)你可以去查看twain的参考手册,我将在后面编程应用中介绍几个最常用的操作。

  现在,我们明白了twain定义的triplets操作,但是这还不够。

在使用dsm_entry()前,必须要加载twain_32.dll文件以获得dsm_entry()函数指针。

(注意:

在你程序中应该添加前面提到的twain.h头文件哦!

  dsmentRypRoclpdsm_entry;//*dsm_entry入口函数的指针

  hmodulehdsmdll;//*twain_32.dll句柄

  

  /*加载twain_32.dll文件

(twain协议驱动下载)  if((hdsmdll=loadlibrary("twain_32.dll"))!

=null)

  {

  if(hdsmdll)//*检查twain_32.dll是否加载

  {

  if((lpdsm_entry=(dsmentRypRoc)getprocaddress(hdsmdll,makeintResouRce

(1)))!

=null)

  {

  //*成功获得dsm_entry()函数指针;

  }

  }

  }

  现在我们明白了,twain所有的操作都是通过dsm_entry()函数来实现的,所以了解该入口函数很有必要。

它定义如下:

  tw_uint16FaRpascaldsm_entry

  (ptw_identityporigin,//*指向操作发起者的指针

  ptw_identitypdest,//*指向目标对象的指针

  tw_uint32dg,//*triplets操作的dg参数:

dg_xxxx

  tw_uint16dat,//*triplets操作的dat参数:

dat_xxxx

  tw_uint16msg,//*triplets操作的msg参数:

msg_xxxx

  tw_memReFpdata//*指向返回数据块的指针

  );

  其中dg、dat、msg参数表示一个你想执行的triplets操作。

porigin表示发起triplets操作的对象。

pdest表示接收triplets操作的对象。

pdata用于获得执行triplets操作后返回的数据。

  对于每个triplets操作,都是由dg、dat、msg三个参数组合构成的。

porigin、pdest参数会根据不同的triplets操作,而使用不同的值。

  函数执行后会返回一个值来表示操作是否成功。

如果返回值为twRc_success表示操作成功,twRc_FailuRe表示操作失败。

同样根据triplets操作的类型不同,还会有其他的返回值。

比如twRc_cancel、twcc_lowmemoRy,具体信息你可以参考twain的说明手册。

twain的操作流程

  application、sourcemanager和source要实现数据传输,必须遵循一个操作流程。

你要进行的操作应该在这个流程规定的动作队列中按逻辑去执行。

比如,在没有加载sourcemanager前,application是不能要求source传输数据的。

为了更好的去描述这个流程,twain为该流程定义了7个状态(1-7)。

  不要以为整个流程很复杂,只要记住这些下面这些状态位,对于理解流程和以后的编程应用都是很有用的。

  l状态位1,2,3

  这几个状态是用于描述sourcemanager的,它们是sourcemanager专有的状态位,所以sourcemanager的标志位是不会大于3的.

  l状态位4,5,6,7

  这几个状态是source专有的。

如果source打开了,source的标志位就不会小于4;如果source关闭了,source就没有了标志位。

  要注意,我们的应用程序可以使用了多个source,每个与source的连接都是一个单独的会话,对于打开的每个source,他们的标志位都是相互独立的,不互相关联。

现在就来看看流程图。

  流程标志位说明

  状态1–准备会话

  在application和sourcemanager建立会话前,sourcemanager的标志位是1.

  在这个时候,sourcemanager还没有被加载到内存中。

如果sourcemanager被加载到内存中,则状态位是2或者3。

  状态2–加载sourcemanager

  sourcemanager现在已经被成功地加载到了程序中,但是没有打开sourcemanager。

在这个时候,sourcemanager开始准备去接受application的triplets操作。

  状态3–打开sourcemanager

  sourcemanager已经打开并且准备去管理source.

  sourcemanager现在准备向source发送打开操作,去打开指定的source,并等待所有针对source的操作结束后,去关闭打开的source.

  sourcemanager在会话关闭前,状态位将保持为3.

  当application打开的source没有关闭时,sourcemanager会拒绝关闭。

  状态4–打开source

  在响应application的一个指定的triplets操作后,source被加载到系统中,并且被sourcemanager打开。

source在加载前将检测是否有足够的系统资源让自己运行(内存、设备是否可用等等)。

application不仅可以查询source的性能参数(当前解析度、是否支持彩色或黑白图像、自动文档传送是否可用),application还可以去设置的source的性能参数。

比如,application可以要求source按指定的分辨率传输黑白图像。

  注意:

可以在source的状态位是4,5,6,或7时,去查询source的性能参数。

但是要想设置source的性能参数必须在状态位是4的时候设置,除非application和source有特殊的约定,否则在标志位为其他数的时候都不可以进行性能参数设置。

  状态5–source可用

  现在可以让source工作了,此时source开始为数据传输做准备。

在该状态下,可以执行一个triplets操作,用以选择是否让source显示它自己的用户界面(source提供的软件界面)。

当source准备好给application传输数据时,标志位就从5变为6了。

  状态6–准备数据传输

  篇二:

twaindriver操作指南(简体)

  twaindriver操作说明

  操作说明:

  1.1主窗口

  1.选择twain来源:

开启任一个支持标准twain接口的软件,如microsoftword20xx;

  打开word20xx依次选择“插入”--“图片”--“来自扫描仪或照相机”,弹出图1-1对话框,选择twain来源设备“Videograb”--“自定义插入”后将出现图1-2所示twain主窗口。

(此部份与各软件的接口有关,可能会有不同)

  图1-1

  2.主窗口组成:

twain接口程序主窗口如图1-2所示,由工具栏、视频窗口等部分组

  成。

  图1-2

  1.2twain工具栏说明

  twaindriver工具栏位于主窗口下面,如图2-1所示。

  图2-1

  功能介绍

  1.拍照模式:

主要分为三种模式。

  1)普通拍照2)旋转拍书:

点击:

点击按钮拍照。

按钮,拍取书的第1页,然后旋转书180度后

  按钮,依次类推,每拍一页就旋转一次,最后点击拍第2页,再点击

  按钮结束拍书。

  3)奇偶页拍书:

点击按钮——〉点击按钮开始奇数页拍书,

  按钮结束奇数页翻拍顺序为第1页、第3页、第5

  页——〉点击

  拍书,程序自动将转换成,将书籍旋转180度,开始偶数页拍书翻

  拍顺序为第6页、第4页、第2页。

拍完最后的偶数页时,自动结束

  成批翻拍。

  2.拍照页码page:

显示当前拍照页码数,拍照后页码自动增加。

  3.预设参数:

将先前保存的设置进行导入,每次调用系统默认导入前一次的设置。

  4.图像旋转:

分为四个方向。

  1)缺省:

视频窗口的图像保持拍摄仪的固有方向。

  2)左旋转90:

将视频窗口的图像向左旋转90。

  3)右旋转90:

将视频窗口的图像向右旋转90。

  4)右旋转180:

将视频窗口的图像旋转180。

  5.定时拍照seconds:

在拍照多张图时,可以设定一定时间进行定时拍照,第一张需

  手动拍照,停止请按停止拍照按钮。

  6.aF对焦设置:

屏蔽、视频像质、aF自动对焦等属性设置(aF选项需aF型号拍摄仪

  支持)。

详见1.5

  7.彩色与黑白格式︰

  1)黑白︰将图像保存为黑白格式,默认文件类型为.tif。

  2)彩色︰将图像保存为彩色格式,默认文件类型为.jpg。

  8.综合设置:

Videochannelcontrol设置,里面包括常用、图像、成批翻拍、屏蔽、

  拍摄器参数、视频像质、aF自动对焦、twain按钮等属性设置(详见1.5)。

  9.停止遮罩与停止放大:

当视频开启后,遮罩与放大功能将自动开启。

单击按钮后,

  遮罩与放大将被停止,恢复原状。

  1)遮罩:

在视频窗口里,点击左键不放,拖动鼠标出现红色矩形截取框,划出所

  要截取的矩形,松开左键后,取得所要截取的范围。

如果要还原原来的图片范围,再单击左键,或者点击按钮,视频窗口恢复原状。

  2)放大:

在视频窗口里,点击右键不放,拖动鼠标,松开右键后,就放大相应的区域。

如果要还原原来的图片大小,再单击右键,或者点击

  口恢复原状。

  10.拍照scan:

准备就绪,就可以开始拍取图像。

  11.停止拍照:

结束本次拍摄工作,下次再进行拍照将生成新的图像文件目录。

按钮,视频窗

  1.3其它设置

  1.3.1向视频窗口左上角拖动鼠标:

弹出选择视频来源的设置。

如图3-1所示。

  1)视频来源类型:

simpleonechannel

  2)视频拍摄仪:

newimagesupercam

  3)截取视频、视频屏蔽、几何变化三个选项必须勾选,进行普通拍照其它参数默

  认,“确定”完成视频源设置

  图3-1

  1.3.2向视频窗口左下角拖动鼠标:

弹出Videochannelcontrol设置,里面包括常用、图像、成批翻拍、屏蔽、拍摄器参数、视频像质、aF自动对焦、twain按钮等属性设置。

如图

  3-2所示。

下面简单介绍对话框各按钮功能,详细请参考1.5视频处理对话框。

  1)常用:

设置目标dpi、保存参数、改变图像格式(黑白、灰度、彩色)等功能

  2)图像:

设置视频分辩率等

  3)成批翻拍:

设置图片保存位置、文件类型、键入文件名、生成多页tiFF文件等

  4)屏蔽:

勾选"激活有效区域"复选框,设置有效区域在x、y方向上的相对最大区

  域的比例,屏蔽被拍资料页面以外的区域,调整合适后关闭该窗口。

  5)拍摄器参数:

设置自动增益agc、自动曝光调整aec、自动白平衡功能awb。

  6)视频像质:

设置gamma等。

  7)aF功能:

aF调焦功能,仅自动对焦型号有此选项。

  8)twain按钮:

设置twain工具栏对应按钮是否开启、拍摄后图像处理方式(此功

  能每次拍照任务完成后需按停止拍照按钮方可生效)

  图3-2

  1.3.3向视频窗口右上角拖动鼠标:

弹出Videosource属性对话框,用来设置拍摄仪的硬件参数,包括明亮、对比、彩度、饱和、锐利度以及曝光值。

如图3-3所示。

  a)

  c)

  e)

  f)brightness:

调整视频亮度hue:

调整视频的色调sharpness:

调整视频的阴影exposure:

调整视频的曝光时间b)contrast:

调整视频的对比度d)saturation:

视频的饱和度

  图3-3

  小提示:

光源较稳定时,在呈像稳定清晰后,可关闭自动曝光expsure功能(去掉exposure复选框),以后开启多易拍时呈像速度将大大提高,如果光源发生变化导致偏色等现象可再开启自动调节功能然后重复前面步骤。

  1.3.4向视频窗口右下角拖动鼠标:

弹出屏蔽,视频像质,aF自动对焦等属性设置(aF选项需aF自动对焦型号拍摄仪支持,使用自动对焦功能时对焦区域小矩形框最好对准文字部分)。

如图3-4所示。

  图3-4

  1.4热键说明

  alt-enter拍照alt-end停止拍照alt-F1普通拍照模式alt-F2旋转拍书alt-F3奇偶页拍书

  篇三:

扫描

  扫描的部分代码及方法

  1.twain和wia两个驱动的区别

  twain是一项重要的接口标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的规范,以有效地避免系统及设备之间的不兼容问题。

在计算机发展初期,计算机与周边外围设备之间没有任何接口标准,每一种硬件设备需要与计算机相连时,必须针对系统开发相应的驱动模块。

由于扫描仪型号的不同,每种扫描仪都有自己相对应的驱动方式和指令集,扫描仪厂商必须为每一款扫描仪编写相应的驱动模块。

这不仅费时费力,而且由于新的扫描仪不断推出,驱动模块的开发始终处于被动地位。

同时,随着软件的不断发展,扫描仪厂商也面临着设备是否支持丰富的应用软件的问题。

另一方面,从软件开发商的角度来看,软件的开发如果缺少硬件设备的支持,势必会使得软件的应用范围受到极大的制约,限制软件的普及和发展。

因此,由于软、硬件的迅速发展,不管是硬件生产厂商还是软件开发商,都迫切需要建立专门的标准,以方便硬件设备和应用系统软件之间的信息数据传输和交换。

twain标准就是在这个背景下应运而生的。

  twain标准的建立,为软件开发商和硬件生产厂家提供了统一的连接规范,避免了重复开发和系统设备不兼容的问题。

  wia是windowsimageacquisition的缩写,可直接翻译为:

windows图像采集系统。

这是windowsxp加入的一个新功能,该功能主要包括了indowsxp对图像设备的支持以及对图像信息的处理编辑等功能。

  微软公司可以说是靠图形界面的操作系统windows而发家的,但具有讽刺意味的是,长久以来,windows在图形图象处理领域内却无可以称道的亮点。

记得早几年用扫描仪,驱动程序是由厂家开发的,应用程序也是厂商附送的。

那时,windows里面与图形处理沾边的程序,大概就是那个解决不了多大问题的“画笔”了。

也许是认为市场已经成熟。

也许是大而全的方针使然,在windowsxp中,微软引入了wia体系,使windows操作系统在支持图形图像处理方面有了很大飞跃。

wia是windowsimageacquisition的缩写,即windows图像采集系统。

该系统涵盖了从图形采集设备支持到编辑排版打印的整个过程。

  wia有点类似于twain的标准。

它也是要求硬件厂商、软件开发商在开发新产品时,遵守这个标准,以避免了重复开发和系统设备不兼容的问题。

  2.扫描例子:

  1.先从网上下载kodak组件,总共有十来个.dll.ocx文件,我们只需用到其中的两个就ok了。

  2.打开你的项目,先引用imgedit.ocx和imgscan.ocx。

(如果引用时有问题,得在“运行”里用命令“regsvr32.exe”执行一下)。

  3.在开始位置引用命名空间:

usingscanlibctl;

  4.在工具箱,选择项里添加控件“kodak图像扫描控件”,默认名称是aximgscan1。

  5.好了,以上弄好后就可以开始写代码了:

  aximgscan1.showselectscanner();//选择扫描仪

  intll_rtn=aximgscan1.openscanner();//打开扫描仪

  if(ll_rtn==0)

  {

  if(aximgscan1.scanneravailable()==true)//判断扫描仪是否可用

  {

  aximgscan1.multipage=true;//是否多页

  aximgscan1.pagecount=aximgscan1.pagecount+1;

  stringpathgen=@"f:

/aaa";

  stringpaths=pathgen+"\\app.path"+"un";

  aximgscan1.image=paths;

  aximgscan1.Filetype=Filetypeconstants.bmp_bitmap;//设置文件类型

  pressiontype=compressiontypeconstants.jpeg;

  aximgscan1.scanto=scantoconstants.displayanduseFiletemplate;

  aximgscan1.setpagetypecompressionopts(comppreferenceconstants.gooddisplay,imagetypeconstants.blackandwhite1bit,

  comptypeconstants.jpegcompression,compinfoconstants.g31dFaxRbo);

  aximgscan1.stopscanbox=false;

  aximgscan1.showsetupbeforescan=true;//是否在扫描前显示设置界面

  aximgscan1.show();

  ll_rtn=aximgscan1.startscan();//开始扫描

  if(ll_rtn==9254||ll_rtn==0){}

  else

  {

  messagebox.show("扫描仪没有正确连接或扫描控件已破坏,请检查!

","系统提示");

  }

  aximgscan1.closescanner();//关闭扫描仪}

  else

  {

  messagebox.show("扫描仪没有正确连接,请重新设置!

","系统提示");

  }

  }

  elseif(ll_rtn==9219)

  {

  message

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1