【问题标题】:How does this code work? [HARD]这段代码是如何工作的? [难的]
【发布时间】:2010-12-02 13:08:03
【问题描述】:

链接: 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”返回类型的方法实际上如何具有返回语句。还有,它在哪里获取和返回图像?

有人可以帮忙吗?

我正在尝试创建一个有用的包装器并将其开源,因为目前没有用于在 C# 中扫描图像的简单拖放解决方案。

感谢您的帮助!

编辑:感谢有关提前退货的帮助。直到!现在我很好奇应用程序如何将图像显示在表单上。

有什么指导吗?

【问题讨论】:

  • @Serg - 你可以调用 return 来终止一个方法。最后的返回无关紧要,因为无论如何该方法都在 if 语句之后结束。

标签: c# image twain


【解决方案1】:

“Void”意味着它什么都不返回,而不是它不返回。所以return语句只是终止函数并返回给调用者

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

DSCap 行查看是否有多个图像。捕获作为对 DSuserif 的调用的一部分发生

【讨论】:

  • 啊,谢谢!以及如何获取图像。你看到他实际拥有 Image 项目的位置了吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2011-05-16
        • 2014-05-10
        • 1970-01-01
        • 2017-04-09
        • 2018-06-03
        • 2013-12-05
        相关资源
        最近更新 更多