其中一种就是微软官方推出的WIA接口调用扫描仪,这种方式是目前最新的。其实这种方式很容易编写,
只不过它内部不会存储用户需要扫描的分辨率等信息,不过这种方法在与方便快捷,直接安装WIA控件到
Windows,直接在C#代码中编写就可以直接调用,不用自己编辑控件的属性等,很方便易用。
另外一种方式就是传统的TWIAN,因为很多扫描仪厂家都墨守陈规的遵循了TWAIN的潜规则,所以这种方法
也是得到了很多编程爱好者的欢迎,这个接口可以直接调用扫描仪厂家已经编写好的扫描窗口,可以实现在驱
动层获取到图片信息,而且这种方法的好处就是可以批量扫描,添加Kodak扫描控件后,也可以实现批量扫描
的功能,而且还提供图片编辑等功能。
Kodak方法所需要的系统组件:
imgadmin.ocx imgcmn.dll imgedit.ocx imgscan.ocx xiffr3_0.dll
imgshl.dll imgthumb.ocx imm32.dll jpeg1x32.dll tifflt.dll
jpeg2x32.dll oieng400.dll oiprt400.dll oislb400.dll oiui400.dll
oissq400.dll oitwa400.dll Run Kodak.bat
真正要用到的空间只有两个。不过,在扫描过程中,为了保证图片的编辑以及其他的操作不受影响,建议全部
安装,运行Run Kodak.bat注册所有的组件。
在Kodak的扫描组件中,我们需要的是imgscan.ocx、imgadmin.ocx、imgedit.ocx三个为主要的控件,其中
imgscan.ocx为Kodak的主要扫描组件。
所有的扫描组件都安装完毕之后,接下来就是在C#中添加扫描组件的调用,操作、获取扫描仪中的数据
。在项目工程中,添加WIA引用以及Kodak组件的应用,Kodak属于工具类,所以在工具箱中还需要添加Kodak组
件工具。
使用Kodak扫描,需要拖放Kodak扫描控件到窗口程序中
添加Kodak的命名空间:
using ScanLibCtl;
下面是在button时间中的代码:
SealPicture.Image = null; string paths =@"E:\img"; try { File.Delete(paths); } catch { } int ll_rtn = axImgScan.OpenScanner(); //打开扫描仪 if (ll_rtn == 0) { if (axImgScan.ScannerAvailable() == true)//判断扫描仪是否可用 { axImgScan.MultiPage = true;//是否多页 axImgScan.PageCount = axImgScan.PageCount + 1; axImgScan.Image = paths; axImgScan.FileType = ScanLibCtl.FileTypeConstants.TIFF;//设置文件类型 axImgScan.CompressionType = CompressionTypeConstants.JPEG; axImgScan.ScanTo = ScanToConstants.FileOnly; axImgScan.SetPageTypeCompressionOpts(CompPreferenceConstants.GoodDisplay,ImageTypeConstants.ColorPal4Bit, CompTypeConstants.JPEGCompression,CompInfoConstants.JPEGHighHigh);//.G31DFaxRBO); axImgScan.StopScanBox = false; axImgScan.ShowSetupBeforeScan = true;//是否在扫描前显示设置界面 axImgScan.Show(); ll_rtn = axImgScan.StartScan();//开始扫描 //以文件流的形式读取图片文件并释放,以便下一次扫面前删除文件 try { FileStream Files = new FileStream(paths, FileMode.Open); Image Picture = Image.FromStream(Files); SealPicture.Image = Picture; Files.Close(); } catch { } if (ll_rtn == 9254 || ll_rtn == 0) { } else { MessageBox.Show("扫描仪没有正确连接或扫描控件已破坏,请检查!", "系统提示...", MessageBoxButtons.OK, MessageBoxIcon.Stop); } axImgScan.CloseScanner(); //关闭扫描仪 } else { MessageBox.Show("扫描仪没有正确连接,请重新设置!", "系统提示...",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } else if (ll_rtn == 9219) { MessageBox.Show("系统没有安装扫描仪或扫描仪没有正确连接!", "系统提示...",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
完成这些代码的编写,也就可以完成了通过调用WIA与Kodak两个扫描组件对扫描议的调用,获取扫描仪中
的图片数据。
下面是项目代码中的截图: