【问题标题】:How to create fast duplex scanning with WIA C#?如何使用 WIA C# 创建快速双面扫描?
【发布时间】:2019-10-22 13:15:41
【问题描述】:

我是 WIA 的新手。我被要求使扫描服务扫描更快和双面。我当前的服务扫描一页,然后将其放入 pdf 等直到少于 20 页(这个数字只是我之前使用的拐杖,如果有人解释如何获得“如果那里有任何文件”,我会很高兴多变的)。我开始在 MSDN 上挖掘并找到描述属性的文档,并在找到描述双工 sanning 的 this 帖子后发现,但其中包含神秘的 5。在我找到this 并弄清楚我需要将 WIA_DPS_DOCUMENT_HANDLING_SELECT 设置为 0x205(FEEDER + DUPLEX + AUTO_ADVANCE)之后。所以我试着像这样设置它们:

    private static void SetProperty(Property property, int value)
    {
        IProperty x = (IProperty)property;
        Object val = value;
        x.set_Value(ref val);
    }

...一些代码...

    foreach (Property prop in device.Properties)
    {
        //LOGGER.Warn(prop.Name);
        //LOGGER.Warn(prop.PropertyID);
        switch ((Int32)prop.PropertyID)
        {
           // Document Handling Select
           case 3088:
              SetProperty(prop, 517);
              break;
           // Pages
           case 3096:
              SetProperty(prop, 1);
              break;
        }
    }

它对我不起作用...它只是停留在设置上...有人可以解释如何设置 AUTO_ADVANCE 和 DUPLEX 道具吗?或者也许“使扫描更快和双工”需要更多的东西,而不仅仅是 AUTO_ADVANCE 和 DUPLEX,我对它们的看法是错误的?或者我应该在我的扫描描述中考虑“ISIS / TWAIN (Windows XP / Vista / 7 / 8 / 8.1 / 10)”字符串并使用其他库?
(Window 10、Canon DR-M160||、DR-M160 & DR-M160II Windows 驱动程序)

这里也是当前的 fetch 函数:

    public List<ImageFile> FetchImageList()
    {
        List<ImageFile> imageList = new List<ImageFile>();
        //bool hasMorePages = true;
        int testcount = 0;
        while (testcount >= 0)
        {
            testcount--;
            WIA.Device device = FindDevice(_deviceId);
            if (device == null)
            {
                LOGGER.Warn("Scanner device not found");
                return null;
            }
            // get item
            WIA.Item scanItem = device.Items[1] as WIA.Item;
            LOGGER.Debug($"ScanItem: {scanItem.ItemID}");

            try
            {
                foreach (Property prop in device.Properties)
                {
                    //LOGGER.Warn(prop.Name);
                    //LOGGER.Warn(prop.PropertyID);
                    switch ((Int32)prop.PropertyID)
                    {
                        // Document Handling Select
                        case 3088:
                            LOGGER.Warn("here");
                            SetProperty(prop, 517);
                            LOGGER.Warn("here");
                            break;
                        // Pages
                        case 3096:
                            SetProperty(prop, 1);
                            break;
                    }
                }
                // scan image
                WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
                WIA.ImageFile image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Front");

                //get back side
                image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Back");
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
        return imageList;
    }

【问题讨论】:

  • “值不在预期范围内”...抱歉含糊不清,对于 c# 我也是新手(

标签: c# scanning twain wia


【解决方案1】:

嗯...我尝试在没有 AUTO_ADVANCE 的情况下进行双面扫描,并在 Transfer 调用中得到 HRESULT: 0x8000FFFF (E_UNEXPECTED)。根据this post(即使那是在Windows 7上)我想没有办法通过使用WIA为我解决这个问题,仍然希望有其他建议......

已解决的问题 我使用了 saraff.twain,它对我有用: - git 页面:https://github.com/saraff-9EB1047A4BEB4cef8506B29BA325BD5A/Saraff.Twain.NET 带有 grate wiki 页面的好库。(对于 .net 4.6.1 也有类似的库)

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 2018-04-27
    • 2012-02-07
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2011-01-15
    • 2023-03-11
    相关资源
    最近更新 更多