设置 TWAIN 扫描的分辨率

Posted

技术标签:

【中文标题】设置 TWAIN 扫描的分辨率【英文标题】:Setting resolution for TWAIN scanning 【发布时间】:2017-11-25 07:34:46 【问题描述】:

我在 WinForms 中创建了一个应用程序,它可以列出所有 twain & wia 扫描仪,并使用该列表中选择的设备进行扫描。

每当我在不使用 TWAIN 用户界面的情况下使用 TWAIN 进行扫描时,我都会得到质量很差的图像。

我的代码基于此处找到的包装器:https://www.codeproject.com/Articles/1376/NET-TWAIN-image-scanner?msg=1097187#xx1097187xx 和 http://www.twain.org/wp-content/uploads/2016/03/TWAIN-2.2-Spec.pdf 的规范

我尝试在 dpi 中设置分辨率,但没有任何区别。设置上限后,rc 总是说“失败”:

TwFix32 f32 = new TwFix32();
f32.FromFloat(300);//value of DPI 

// Set X resolution.
TwCapability capX = new TwCapability(TwCap.XResolution, f32.Whole);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capX);

// Set Y resolution.
TwCapability capY = new TwCapability(TwCap.YResolution, f32.Whole);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capY);

【问题讨论】:

【参考方案1】:

它通过创建一个新的构造函数来工作:

public TwCapability(TwCap cap, short sval, TwType twtype)

    Cap = (short)cap;
    ConType = (short)TwOn.One;
    Handle = Twain.GlobalAlloc(0x42, 6);
    IntPtr pv = Twain.GlobalLock(Handle);
    Marshal.WriteInt16(pv, 0, (short)TwType.Int16);
    Marshal.WriteInt32(pv, 2, (int)sval);
    Marshal.WriteInt16(pv, 0, (short)twtype);
    Twain.GlobalUnlock(Handle);



TwCapability capResx = new TwCapability(TwCap.ICAP_XRESOLUTION, 300, TwType.Fix32);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capResx);


TwCapability capResy = new TwCapability(TwCap.ICAP_YRESOLUTION, 300, TwType.Fix32);
rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capResy); 

【讨论】:

以上是关于设置 TWAIN 扫描的分辨率的主要内容,如果未能解决你的问题,请参考以下文章

Python3 或 C/C++:TWAIN 接口

怎么给OCR文字识别软件设置正确的扫描分辨率

如何通过 TWAIN 获取扫描仪当前的 DPI 设置?

在 TWAIN 中是不是可以强制扫描仪将区域设置为整个宽度?

Twain 检测横向扫描

使用 WIA 或 TWAIN 扫描页面