我正在尝试使用NTwain库与C#的兼容TWAIN的多功能打印机和扫描仪,Canon Pixma MG5750进行交互.我正在编写一个程序来将图像扫描到一个Image对象中.
在扫描图像之前扫描仪必须预热; 这样做时会显示以下弹出窗口:
完成此过程后,它将开始扫描文档.
虽然该程序确实有效,但问题在于,这种预热过程有时需要很长时间,没有明显的原因,最多几分钟.使用佳能自己的应用程序IJ扫描实用程序时,这个问题永远不会发生,它使用TWAIN并显示相同的对话框,但仅持续几秒钟.
我可以使用TWAIN功能来提高预热过程的速度吗?我试着改变ICapXResolution和ICapYResolution,但这些只会增加实际扫描的速度暖起来后,只要不影响热身本身.
我的程序如下所示.请注意,它是一个控制台应用程序,因此使用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)
这比我想象的要简单得多!
我的佳能多功能一体机向 Windows 公开了两个设备。在我的机器上,它们是:
使用 WIA 设备,而不是 Canon 设备。WIA 设备几乎立即预热!
只要您使用 WIA 设备,Fred Kleuver 发布的代码就可以完美地进行扫描;使用佳能时似乎会崩溃。