2008-08-12 63 views
21

我想实现一个无纸化文件系统,并希望使用WIA与C#进行图像采集。 CodeProject上有很多示例项目等等。但是,在下载了我能找到的每一个项目之后,我遇到了一个问题。在Vista上使用C#/ WIA 2.0版扫描

在他们每一个人中,对WIALib的引用都被打破了。当我添加“Microsoft Windows Image Acquisition”作为参考时,我的开发工作站(也是运行该工具的机器)上的唯一版本是2.0。

不幸的是,这些示例项目中的每一个似乎都是针对1.x编码的。参考文献以“WIA”代替“WIALib”。我做了一个镜头,只是改变了命名空间的导入,但很明显,API是完全不同的。

是否有关于实施v2.0或升级其中一个现有示例项目的信息?

+0

快速的问题。你绝对需要WIA吗?或者你可以和吐温一起过吗?如果吐温还好,我可能会有一些代码要捐献。 – 2008-08-12 15:48:18

回答

21

要访问WIA,您需要添加对COM库“Microsoft Windows Image Acquisition Library v2.0”(wiaaut.dll)的引用。 添加“使用WIA;”

const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; 
CommonDialogClass wiaDiag = new CommonDialogClass(); 
WIA.ImageFile wiaImage = null; 

wiaImage = wiaDiag.ShowAcquireImage(
     WiaDeviceType.UnspecifiedDeviceType, 
     WiaImageIntent.GrayscaleIntent, 
     WiaImageBias.MaximizeQuality, 
     wiaFormatJPEG, true, true, false); 

WIA.Vector vector = wiaImage.FileData; 

(System.Drawing中)

Image i = Image.FromStream(new MemoryStream((byte[])vector.get_BinaryData())); 
i.Save(filename) 

这就是一个基本方式,可与我的平板/文档进纸。如果你一次只需要一个以上的文档/页面,那么可能有更好的方法来做到这一点(从我所能看到的情况来看,这只能处理一张图片,尽管我不完全确定)。虽然它是WIA v1文档,但Scott Hanselman的Coding4Fun article on WIA确实包含了一些关于如何为多个页面执行此操作的更多信息,我认为(我还没有比我自己更进一步)

如果它适用于无纸办公系统,您可能还需要查看MODI(Office Document Imaging)为您执行所有OCR。

+0

我会给这个镜头。我不会搞乱OCR,因为我没有看到任何系统能够在我的东西的任何地方接近足够的地方,而不仅仅是做一些不错的元数据和标记。 这应该给我大部分我需要的东西它被引用,我可以通过API挖掘 – 2008-09-21 18:17:16

0

它不需要需要成为WIA。我主要是在看WIA设置,因为它为不同的扫描仪提供了相同的基本界面。我在这台机器上安装了3台扫描仪,并且TWAIN驱动程序/软件全部吸入(例如在扫描期间阻塞屏幕)。

对于文档管理,我真的在寻找简单的200dpi灰度扫描,所以TWAIN驱动程序中的大部分内容都是过量的。

这就是说,在我转向TWAIN之前,询问这里是我最后一次尝试弄清如何在WIA中做到这一点的一部分。

0

另一个注意事项:您必须从Microsoft.com下载WIA 2.0 dll,然后浏览到dll并将其添加到您的项目中。

1

更新:我因为它是一个不同的答案(一年后)分别加入这一点。我了解到XP有WIA 1.0,Vista也有WIA2.0。但是,您可以从here安装适用于Windows XP Sp1 +的WIA 2.0。

然后我也做了有代码,我发现某处的interweb这里一个小型图书馆,它还具有扫描多页的功能: http://adfwia.codeplex.com/