这段代码是如何工作的? [硬]

时间:2010-12-02 13:08:03

标签: c# image twain

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!现在我很好奇应用程序如何将图像显示在表单上。

任何指导?

4 个答案:

答案 0 :(得分:3)

“Void”表示它不返回任何内容,而不是它不返回。所以return语句只是终止函数并返回给调用者

对于您的其他问题,还有一些其他相关的堆栈溢出问题

DSCap线正在查看是否有多个图像。捕获是在调用DSuserif

时发生的

答案 1 :(得分:1)

事实上,您可以通过调用Application.AddMessageFilter(this)方法在表单上设置邮件过滤器。因此,您必须收听扫描仪事件,当您收到TwainCommand.TransferReady事件时,您将致电TransferPictures()以获取图片集。

答案 2 :(得分:0)

该方法只返回void以避免执行其他代码段。这完全合法。该方法不是获取图像,它只是准备正在获取图像的硬件和UI,我想说。

答案 3 :(得分:0)

return;导致控制流退出该函数。

看看图书馆。似乎Acquire()只是让驱动程序执行获取,并调用TransferPictures()来检索图片(一个返回ArrayList,所以是的,它返回了一些东西)。