扫描_第1页
扫描_第2页
扫描_第3页
扫描_第4页
扫描_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扫描的部分代码及方法1 Twain和Wia两个驱动的区别TWAIN是一项重要的接口标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的规范,以有效地避免系统及设备之间的不兼容问题。在计算机发展初期,计算机与周边外围设备之间没有任何接口标准,每一种硬件设备需要与计算机相连时,必须针对系统开发相应的驱动模块。由于扫描仪型号的不同,每种扫描仪都有自己相对应的驱动方式和指令集,扫描仪厂商必须为每一款扫描仪编写相应的驱动模块。这不仅费时费力,而且由于新的扫描仪不断推出,驱动模块的开发始终处于被动地位。同时,随着软件的不断发展,扫描仪厂商也面临着设备是否支持丰富的应用软件的问题。另一方面,从软件开发商的角度来看,软件的开发如果缺少硬件设备的支持,势必会使得软件的应用范围受到极大的制约,限制软件的普及和发展。因此,由于软、硬件的迅速发展,不管是硬件生产厂商还是软件开发商,都迫切需要建立专门的标准,以方便硬件设备和应用系统软件之间的信息数据传输和交换。TWAIN标准就是在这个背景下应运而生的。TWAIN标准的建立,为软件开发商和硬件生产厂家提供了统一的连接规范,避免了重复开发和系统设备不兼容的问题。WIA是Windows ImageAcquisition的缩写,可直接翻译为:Windows图像采集系统。这是windows XP加入的一个新功能,该功能主要包括了indowsXP对图像设备的支持以及对图像信息的处理编辑等功能。微软公司可以说是靠图形界面的操作系统Windows而发家的,但具有讽刺意味的是,长久以来,Windows在图形图象处理领域内却无可以称道的亮点。记得早几年用扫描仪,驱动程序是由厂家开发的,应用程序也是厂商附送的。那时,Windows里面与图形处理沾边的程序,大概就是那个解决不了多大问题的“画笔”了。也许是认为市场已经成熟。也许是大而全的方针使然,在Windows xp中,微软引入了WIA体系,使Windows操作系统在支持图形图像处理方面有了很大飞跃。WIA是Windows Image Acquisition的缩写,即Windows图像采集系统。该系统涵盖了从图形采集设备支持到编辑排版打印的整个过程。WIA有点类似于TWAIN的标准。它也是要求硬件厂商、软件开发商在开发新产品时,遵守这个标准,以避免了重复开发和系统设备不兼容的问题。2扫描例子:1.先从网上下载Kodak组件,总共有十来个.dll .OCX文件,我们只需用到其中的两个就OK了。 2.打开你的项目,先引用IMGEDIT.OCX和IMGSCAN.OCX。(如果引用时有问题,得在“运行”里用命令“regsvr32.exe ”执行一下)。 3.在开始位置引用命名空间:using ScanLibCtl; 4.在工具箱,选择项里添加控件“kodak图像扫描控件”,默认名称是axImgScan1。 5.好了,以上弄好后就可以开始写代码了: axImgScan1.ShowSelectScanner();/选择扫描仪 int ll_rtn = axImgScan1.OpenScanner(); /打开扫描仪 if (ll_rtn = 0) if (axImgScan1.ScannerAvailable() = true)/判断扫描仪是否可用 axImgScan1.MultiPage = true;/是否多页 axImgScan1.PageCount = axImgScan1.PageCount + 1; string pathGen = f:/aaa; string paths = pathGen+app.path + UN; axImgScan1.Image = paths; axImgScan1.FileType = FileTypeConstants.BMP_Bitmap;/设置文件类型 axImgScan1.CompressionType = 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( 扫描仪没有正确连接,请重新设置!,系统提示); else if (ll_rtn = 9219) MessageBox.Show(系统没有安装扫描仪或扫描仪没有正确连接!, 系统提示); 3例句:AbstractIn Windows imaging applications, the most used API for scanning is TWAIN . Unfortunately, the new .NET Framework has no built-in support for TWAIN. So we have to work with the interop methods of .NET to access this API. This article doesnt explain this interop techniques, and good knowledge of the TWAIN 1.9 specifications is assumed! The sample code included doesnt present a finished library, only some essential steps for a minimal TWAIN adaption to .NET applications.DetailsFirst step was to port the most important parts of TWAIN.H, these are found in TwainDefs.cs. The real logic for calling TWAIN is coded in the class Twain, in file TwainLib.cs. As the TWAIN API is exposed by the Windows DLL, twain_32.dll, we have to use the .NET DllImport mechanism for interop with legacy code. This DLL has the central DSM_Entry(), ordinal #1 function exported as the entry point to TWAIN. This call has numerous parameters, and the last one is of variable type! It was found to be best if we declare multiple variants of the call like:DllImport(twain_32.dll, EntryPoint=#1)private static extern TwRC DSMparent( In, Out TwIdentity origin, IntPtr zeroptr, TwDG dg, TwDAT dat, TwMSG msg, ref IntPtr refptr );The Twain class has a simple 5-step interface:class Twain Init(); Select(); Acquire(); PassMessage(); TransferPictures();For some sort of callbacks, TWAIN uses special Windows messages, and these must be caught from the application-message-loop. In .NET, the only way found was IMessageFilter.PreFilterMessage(), and this filter has to be activated with a call like Application.AddMessageFilter(). Within the filter method, we have to forward each message to Twain.PassMessage(), and we get a hint (enum TwainCommand) back for how we have to react. Sample AppThe sample is a Windows Forms MDI-style application. It has the two TWAIN-related menu items Select Source. and Acquire. Once an image is scanned in, we can save it to a file in any of the GDI+ supported file formats (BMP, GIF, TIFF, JPEG.)LimitationsAll code was only tested on Windows 2000SP2, with an Epson Perfection USB scanner and an Olympus digital photo camera. The scanned picture is (by TWAIN spec) a Windows DIB, and the sample code has VERY little checking against error return codes and bitmap formats. Unfortunately, no direct method is available in .NET to convert a DIB to the managed Bitmap class. Some known problems may show up with color palettes and menus.Note, TWAIN has its root in 16-Bit Windows! For a more modern API supported on Windows ME/XP, have a look at Windows Image Acquisition (WIA).LicenseThis article, along with any associated source code and files, is licensed under A Public Domain dedication4几种调用扫描仪的方案(1)TWAIN TWAIN指TWAIN协议,全称Toolkit Without An Interesting Name,无注名工具包协议,是应用软件从计算机外设获取静态图像的国际标准。 TWAIN是一项重要的接口标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的规范,以有效地避免系统及设备之间的不兼容问题。TWAIN协议为操作系统提供了软件支持,使得符合TWAIN协议的软件通过调用TWAIN协议接口就能从兼容TWAIN协议的外设上获取静态图像,而不必考虑外设的功能差别。 TWAIN共包括4个二进制文件。如果要使用该接口,就必须要保证他们被成功地安装在本地计算机上。如下: TWAIN_32.DLL TWAIN.DLL TWUNKER_32.EXE TWUNKER_16.EXE 在Windows 操作系统中,Microsoft已经把这些文件作为系统文件随同操作系统一起发布了。可以在Windows安装目录中查找到这些文件。通过TWAIN提供的头文件(twain.h),可以实现扫描功能。存在问题:由于twain标准只是推荐标准,不是强制的标准;因此,有些扫描仪厂家在实现twain接口时通常不是严格按照twain规范进行,而只是部分遵守。这就导致了基于TWAIN标准实现的扫描仪调用应用接口在调用一些扫描仪时可能无法正常工作。(2)Kodakimg 映像KODAKIMG.EXE是Windows 95/ 98/NT 和 Windows 2000中用于图像扫描、浏览和编辑的附件程序(在WINDOWS安装过程中是可选的),分为自由版和专业版(需另外购买)。在Windows的安装过程中,4个OCXKodak控件(Kodak图像编辑控件、Kodak图像管理控件、Kodak图像扫描控件及Kodak图像缩略图控件)随着自由版映像程序的安装也被一同安装。这四个控件被允许用于任何的Windows开发工具中来开发与图像有关的软件产品。当然,自由版的映像程序限制并隐藏了这四个控件的一些属性和方法;比如,编辑控件的DeSpeckle方法仅限于结合专业版的映像程序使用。另外值得一提的是,专业版的映像程序通过引入新的图像OCR控件提供了扩展的图像处理能力。还有,Windows映像程序并没有随着Windows ME及Windows XP一同分发。在新的系统中,微软想以“图像与电传浏览程序”和“扫描仪与相机向导”取而代之。要在新系统上使用Windows映像程序,必须另行购买Windows映像程序专业版本;但如果从Windows 2000系统升级到XP,依然有映像程序及四个控件可用。 (3)Dynamic TWAIN ActiveX Dynamic TWAIN ActiveX 控件可以使得你能从任何 TWAIN 兼容的设备获取图象。它有着精心设计的界面,以及内建的向导模式, Dynamic TWAIN 使用起来很简单。你可以在若干代码间做典型的 TWAIN 工作。同时, Dynamic TWAIN 功能很强大。它和 TWAIN V1.9规范兼容,内建了 TIFF 和 JPEG 的编解码器。它还支持所有的三种图象格式的转换以及其他的特性。通过 Dynamic TWAIN ActiveX 控件,如果有 TWAIN 驱动器的话,你可以操作扫描仪、数字相机或捕捉卡。更高端的获取功能使得能更容易使用它,就算条件再苛刻,低端的功能也能让我们操作更弹性更易用。 (4)WIA Windows 图像采集 (WIA) 是最新 imaging 技术,在Microsoft Windows Millennium Edition中引入, 包含在更高版本的 MicrosoftWindows 操作系统中(例如WindowsXP,注意Windows2000不支持WIA)。 WIA 提供广泛的支持以启用 imaging 设备, 如扫描仪和数码相机, 以与图像应用程序 (例如, McrosoftPicture2000和 Adobe Photoshop)对接。 WIA之前的成像设备行业标准是TWAIN标准。 使用WIA,制造商只需要写 WIA microdriver 以允许设备使用。 这类似于打印制造商提供 minidriver, 而其他WIA组件由操作系统实现。 使用WIA, 独立硬件供应商 (IHV) 可集中编写代码以提高设备功能。WIA和TWAIN的关系是,WIA是微软操作系统的影像获取体系结构,属于Windows操作系统驱动程序类;而TWAIN是开放协议,用来解决应用软件对不同影像外设的可移植性调用。应当说,WIA是驱动层上的东西,它为应用程序提供SDK接口;而TWAIN协议在驱动程序和应用程序间提供一个公用接口。TWAIN的层次高于WIA。5用imgscan.ocx来扫描图像可能有的朋友做oa软件时可能要用到扫描图像的功能,在这里我简要说一下imgscan.ocx的用法。Imgscan.ocx在winnt的安装目录下就有,它支持Twain标准,一般扫描仪都适用。ocx控件我们在c#中也是可以调用的。属性:/是否在扫描前显示设置界面ShowSetupBeforeScan/扫描到哪里(传真、文件目录等)ScanTo/扫描到文件夹的位置Image例如:axImgScan1.Image=c:imgscanimgimgscan*;后面加*号,支持批量扫描,一次可以扫描多张图像方法:/打开扫描OpenScanner()/开始扫描StartScan()/结束扫描CloseScanner()一、利用imgscan.ocx控件 在网上可以下载此kodak的所以组件,此方式是以com 的方式实现的,在VB6中试用成功,但是有个问题,就是用ScannerAvailable属性无法检测扫描仪是否准备就绪,在C#中目前还不知道怎么用,网上都是说是引用后直接可以用,但我引用后,发现会报错,期待有人解决。在这里我提供这个组件和VB6源代码的下载组件:附件: Kodak.rar vb6代码:附件: imgscan-vb6.rar 二、利用wia来扫描Windows 图像采集 (WIA) 是最新 imaging 技术,在Microsoft Windows Millennium Edition中引入, 包含在更高版本的 MicrosoftWindows 操作系统中(例如WindowsXP,注意Windows2000不支持WIA)。 WIA 提供广泛的支持以启用 imaging 设备, 如扫描仪和数码相机, 以与图像应用程序 (例如, MicrosoftPicture2000和 Adobe Photoshop)对接。WIA之前的成像设备行业标准是TWAIN标准。 使用WIA,制造商只需要写 WIA microdriver 以允许设备使用。 这类似于打印制造商提供 minidriver, 而其他WIA组件由操作系统实现。使用WIA, 独立硬件供应商 (IHV) 可集中编写代码以提高设备功能。WIA和TWAIN的关系是,WIA是微软操作系统的影像获取体系结构,属于Windows操作系统驱动程序类;而TWAIN是开放协议,用来解决应用软件对不同影像外设的可移植性调用。应当说,WIA是驱动层上的东西,它为应用程序提供SDK接口;而TWAIN协议在驱动程序和应用程序间提供一个公用接口。TWAIN的层次高于WIA。WIA 是 Windows Image Acquisition 的简称,当前可用版本是 WIA 1.0,它是 Windows Millennium Edition (Windows Me) 或者更高版本的 Windows 系统中提供的数字图像获取服务,同时它也能用于管理数字图像设备。WIA 接口既是应用程序接口(WIA API),又是设备驱动程序接口(WIA DDI),下面要讲述的都是有关 WIA API 的内容。 目前我虽然装的是vs2008,但发现wia还是1.0的版本,大家可以在MS的网站上下载此类库在C#中使用WIA获取扫描仪数据(一)WIA(Windows Image Acquire,最新版本2.0)是Windows中一组从设备中捕获图像的标准API集合,它可以从设备(例如扫描仪、数码相机)中获取静态图像,以及管理这些设备。它既是API,又是DDI(Device Driver Interface)。因此,只要是满足这个规范的设备,都能够利用WIA直接和应用程序交互,而不是通过驱动。WIA甚至提供了统一的对话框来获取图片。WIA是基于Com的,有两种使用方式:c+:使用WIA自定义接口 其他:使用WIAAL(WIA Automation Layer)。 注:在Windows XP sp1以前的版本,WIAAL还不存在,因此第二种方式用的是WIA Scripting Model。在.Net中使用WIA,我们用的是第二种方法。接下来做一个简单的图像扫描程序:界面新建一个WinForm应用程序,在上面添加一个按钮和一个图片框,点击按钮时启动扫描进程,然后在图片框中显示图像,应用程序界面如下:使用WIAVisual Studio 2008有一个好处,可以自动装配Com组件,在工程中添加一个WIA的COM引用:点击确定后,会在工程引用中添加一个WIA.Interop.dll的文件,可以在对象浏览器中查看它:打开扫描对话框接下来可以利用WIA来进行扫描了,步骤很简单,首先引用命名空间:using WIA;接下来,在button的Click事件中,添加如下代码:ImageFile imageFile = null;CommonDialogClass cdc = new WIA.CommonDialogClass();try imageFile = cdc.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.TextIntent, WIA.WiaImageBias.MaximizeQuality, 00000000-0000-0000-0000-000000000000, true, true, false);catch (System.Runtime.InteropServices.COMException) imageFile = null;WIA会自动弹出标准扫描对话框,进行扫描操作:获取图像调用ShowAcquireImage后,扫描后的数据就保存在ImageFile对象里了。用以下方法读取ImageFile中的数据(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论