LINK: http://www.codeproject.com/KB/dotnet/twaindotnet.aspx
我正在尝试为TWAIN的这个开源.NET实现创建一个包装类,我很难理解它实际上是如何获取图像的。
我已经下载了源代码,在GUI中有一个名为Acquire的按钮。当我单击此按钮转到它的事件处理程序时,我发现这个代码我假设得到图像:
private void menuItemScan_Click(object sender, System.EventArgs e)
{
if (!msgfilter)
{
this.Enabled = false;
msgfilter = true;
Application.AddMessageFilter(this);
}
tw.Acquire();
}
如果我按照Acquire()方法查看它的内容,我会看到:
public void Acquire()
{
TwRC rc;
CloseSrc();
if (appid.Id == IntPtr.Zero)
{
Init(hwnd);
if (appid.Id == IntPtr.Zero)
return;
}
rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.OpenDS, srcds);
if (rc != TwRC.Success)
return;
TwCapability cap = new TwCapability(TwCap.XferCount, 1);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
if (rc != TwRC.Success)
{
CloseSrc();
return;
}
TwUserInterface guif = new TwUserInterface();
guif.ShowUI = 1;
guif.ModalUI = 1;
guif.ParentHand = hwnd;
rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
if (rc != TwRC.Success)
{
CloseSrc();
return;
}
}
我不明白的是具有'void'返回类型的方法实际上如何具有return语句。此外,它在哪里获取并返回图像?
任何人都可以帮忙吗?
我正在尝试创建一个有用的包装器和开源它,因为它没有简单的拖放解决方案来扫描C#中的图像。
感谢您的帮助!
修改:感谢您提前退货的帮助。 TIL!现在我很好奇应用程序如何将图像显示在表单上。
任何指导?
答案 0 :(得分:3)
“Void”表示它不返回任何内容,而不是它不返回。所以return语句只是终止函数并返回给调用者
对于您的其他问题,还有一些其他相关的堆栈溢出问题
DSCap线正在查看是否有多个图像。捕获是在调用DSuserif
时发生的答案 1 :(得分:1)
事实上,您可以通过调用Application.AddMessageFilter(this)
方法在表单上设置邮件过滤器。因此,您必须收听扫描仪事件,当您收到TwainCommand.TransferReady
事件时,您将致电TransferPictures()
以获取图片集。
答案 2 :(得分:0)
该方法只返回void以避免执行其他代码段。这完全合法。该方法不是获取图像,它只是准备正在获取图像的硬件和UI,我想说。
答案 3 :(得分:0)
return;
导致控制流退出该函数。
看看图书馆。似乎Acquire()
只是让驱动程序执行获取,并调用TransferPictures()
来检索图片(一个返回ArrayList
,所以是的,它返回了一些东西)。