摘要
在windows图象应用程序中,用于扫描的主要API是TWAIN www.twain.org .不幸的,是新的.NET Freamework框架没有内置支持TWAIN.因此,我们必须去写一个方法去使.NET下可以使用这个API。这个简单的代码包含的不是最终的功能介绍,只是一些并于.NET应用开发的TWAIN编程基本的步骤
祥细设计
第一步是最重要的部分,设置TWAIN.H端口,这部分代码在TwainDefs.cs中可以找到。主要的逻辑代码在TwainLib.cs的Twain 类中。TWAIN API 存在于Windows DLL的Twain_32.dll中,我们必须用.NET DLL 输入机制来实现交互性代码。这个DLL的中枢是DSM_Entry(),序数1#方法输出TWAIN的入口指针。它调用一些许多参数,最后一个是可变类型!如果在声明多个变量去调用,这是最好的,像如下:
[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 );
Twain 类的第5步如下:
class Twain
{
Init();
Select();
Acquire();
PassMessage();
TransferPictures();
}
对于某些“回叫信号”,TWAIN调用特殊Windows通信,并且捕获应用环路信息。在.NET中,唯一的捕获方式是调用IMessageFilter.PreFilterMessage(),过滤器将在调用Application.AddMessageFilter()时被激活。在过滤器的方法中,我们将转送每一个信息给Twain.PassMessage(),并显示操作提示(Twain命令菜单).
这个例子是Windows 窗口MDI-style应用。它有两个TWAIN-related菜单选项 Select Source… 和Acquire …,一个是图像扫描,我们可以把扫描的图像保存成任何的GDI+支持的文件格式(BMP,GIF,TIFF,JPEF…)
代码调试环境是:windows 2000/SP2,日本爱普生科技公司 USB扫描仪 。
扫描图像端口:Windows DIB(TWAIN spec调用)