几分钟,佳能TWAIN扫描仪坚持"热身"

Aar*_*sen 8 c# twain scanning

我正在尝试使用NTwain库与C#的兼容TWAIN的多功能打印机和扫描仪,Canon Pixma MG5750进行交互.我正在编写一个程序来将图像扫描到一个Image对象中.

在扫描图像之前扫描仪必须预热; 这样做时会显示以下弹出窗口:

在此输入图像描述

完成此过程后,它将开始扫描文档.

虽然该程序确实有效,但问题在于,这种预热过程有时需要很长时间,没有明显的原因,最多几分钟.使用佳能自己的应用程序IJ扫描实用程序时,这个问题永远不会发生,它使用TWAIN并显示相同的对话框,但仅持续几秒钟.

我可以使用TWAIN功能来提高预热过程的速度吗?我试着改变ICapXResolutionICapYResolution,但这些只会增加实际扫描的速度暖起来后,只要不影响热身本身.

我的程序如下所示.请注意,它是一个控制台应用程序,因此使用ThreadPool.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using NTwain;
using NTwain.Data;
using System.Drawing;
using System.Threading;

namespace TwainExample
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(o => TwainWork());
            Console.ReadLine();
        }

        static void TwainWork()
        {
            var identity = TWIdentity.CreateFromAssembly(DataGroups.Image, Assembly.GetEntryAssembly());

            var twain = new TwainSession(identity);
            twain.Open();

            twain.DataTransferred += (s, e) =>
            {
                var stream = e.GetNativeImageStream();
                var image = Image.FromStream(stream);
                // Do things with the image...
            };

            var source = twain.First();
            Console.WriteLine($"Scanning from {source.Name}...");
            var openCode = source.Open();
            Console.WriteLine($"Open: {openCode}");
            source.Enable(SourceEnableMode.NoUI, false, IntPtr.Zero);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

Scanning from Canon MG5700 series Network...
Open: Success
Run Code Online (Sandbox Code Playgroud)

Aar*_*sen 2

这比我想象的要简单得多!

我的佳能多功能一体机向 Windows 公开了两个设备。在我的机器上,它们是:

  • 佳能MG5700系列网络
  • WIA-MG5700系列_C6CA27000000

使用 WIA 设备,而不是 Canon 设备。WIA 设备几乎立即预热!

只要您使用 WIA 设备,Fred Kleuver 发布的代码就可以完美地进行扫描;使用佳能时似乎会崩溃。