使用 Twain API for Epson DS-510 双面扫描失败
Duplex Scanning Failure Using Twain API for Epson DS-510
我想使用 C# 应用程序使用 Twain Library for Epson DS-510 扫描仪扫描文档,但它只扫描一面。
扫描仪支持页面的双面扫描,并使用扫描仪扫描功能进行了测试,但它不使用应用程序进行扫描。
此外,我还有另一台扫描仪,它是 Canon-2510C TWAIN,但它确实可以成功扫描双面。
最近,我安装了 TWAIN 示例应用程序以查看连接到数据源的 Twain 配置。图片已添加到下面的附件中。
CAP_DublexEnabled 默认为 false。当我想将 CAP_DublexEnabled 设置为 TRUE 时,它确实如此,但在关闭示例应用程序并再次重新打开后它仍然相同时。
它真的支持用 Twain 进行双面扫描吗?还是我必须更改 TwainLib 的 Acquire 方法的代码 class?
TwainLib的获取方法class:
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, 50);
//TwCapability cap = new TwCapability(TwCap.DuplexEnabled, 50);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
if (rc != TwRC.Success)
{
CloseSrc();
return;
}
TwUserInterface guif = new TwUserInterface();
guif.ShowUI = 0;
guif.ModalUI = 1;
guif.ParentHand = hwnd;
rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
if (rc != TwRC.Success)
{
//TwainGui.PicForm.arsivOK = false;
CloseSrc();
return;
}
}
折腾了几天,网上查了,测试了,终于找到了解决方法。
首先,我使用以下代码将 DuplexEnabled 功能设置为 true:
TwCapability capDuplex = new TwCapability(TwCap.DuplexEnabled, true);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capDuplex);
之后,TW_RC值出现SUCCESS,表示设置值成功。
然后我们可以毫无问题地扫描两面。
但是这里的观点是capability的类型,我们如上设置后,你要根据自己的需要设计TwCapability class方法,你必须使用Twain类型,bool类型还有那些方法。
祝大家有个愉快的一天!
我想使用 C# 应用程序使用 Twain Library for Epson DS-510 扫描仪扫描文档,但它只扫描一面。 扫描仪支持页面的双面扫描,并使用扫描仪扫描功能进行了测试,但它不使用应用程序进行扫描。
此外,我还有另一台扫描仪,它是 Canon-2510C TWAIN,但它确实可以成功扫描双面。
最近,我安装了 TWAIN 示例应用程序以查看连接到数据源的 Twain 配置。图片已添加到下面的附件中。
CAP_DublexEnabled 默认为 false。当我想将 CAP_DublexEnabled 设置为 TRUE 时,它确实如此,但在关闭示例应用程序并再次重新打开后它仍然相同时。
它真的支持用 Twain 进行双面扫描吗?还是我必须更改 TwainLib 的 Acquire 方法的代码 class?
TwainLib的获取方法class:
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, 50);
//TwCapability cap = new TwCapability(TwCap.DuplexEnabled, 50);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
if (rc != TwRC.Success)
{
CloseSrc();
return;
}
TwUserInterface guif = new TwUserInterface();
guif.ShowUI = 0;
guif.ModalUI = 1;
guif.ParentHand = hwnd;
rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
if (rc != TwRC.Success)
{
//TwainGui.PicForm.arsivOK = false;
CloseSrc();
return;
}
}
折腾了几天,网上查了,测试了,终于找到了解决方法。
首先,我使用以下代码将 DuplexEnabled 功能设置为 true:
TwCapability capDuplex = new TwCapability(TwCap.DuplexEnabled, true);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capDuplex);
之后,TW_RC值出现SUCCESS,表示设置值成功。 然后我们可以毫无问题地扫描两面。
但是这里的观点是capability的类型,我们如上设置后,你要根据自己的需要设计TwCapability class方法,你必须使用Twain类型,bool类型还有那些方法。
祝大家有个愉快的一天!