如何在 TWAIN 用户界面 (DS) 中修改分辨率 (DPI) 范围

Posted

技术标签:

【中文标题】如何在 TWAIN 用户界面 (DS) 中修改分辨率 (DPI) 范围【英文标题】:How to modify resolution (DPI) Range in TWAIN User Interface (DS) 【发布时间】:2017-03-23 08:39:04 【问题描述】:

我想在 Twain 扫描仪用户界面中设置 DPI 范围。看看下面的截图。 DPI 下拉从 50 开始到 600。如何将其限制在 400 到 600。

我尝试了以下代码,但它只是设置 DPI,如果用户从用户界面更改,我的更改就会消失。

            TwFix32 f32 = new TwFix32();
            f32.FromFloat(400);//value of DPI 
            TwCapability capX = new TwCapability(TwCap.XResolution, f32.Whole);
            rc = dScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capX);

            TwCapability capY= new TwCapability(TwCap.YResolution, f32T.Whole);
            rc = dScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, capY);

【问题讨论】:

【参考方案1】:

每个 TWAIN 源都实现了自己的用户界面。 TWAIN 规范不提供更改此用户界面的方法;你只能显示它。

您能做的最好的事情是编写自己的 UI 并显示 那个,而不是要求 TWAIN 显示它的 UI。然后,您可以询问设备以确定它支持哪些分辨率,并过滤掉任何不符合您需求的选项。您可以在图像采集之前立即以编程方式设置 DPI(正如您已经在做的那样)。

【讨论】:

【参考方案2】:

更改图像分辨率

 this._twain32.Capabilities.XResolution.Set((float)_item.Tag);
 this._twain32.Capabilities.YResolution.Set((float)_item.Tag);

要选择平板式扫描仪,

if (this._twain32.Capabilities.Duplex.IsSupported(TwQC.GetCurrent) && this._twain32.Capabilities.Duplex.GetCurrent() != TwDX.None)
                
                    if (this._twain32.Capabilities.FeederEnabled.IsSupported(TwQC.Set))
                    
                        this._twain32.Capabilities.FeederEnabled.Set(false);

                        if (this._twain32.Capabilities.DuplexEnabled.IsSupported(TwQC.Set))
                        
                            this._twain32.Capabilities.DuplexEnabled.Set(false);
                        
                        this._twain32.Capabilities.XferCount.Set(1);
                    
                

要选择 ADF 类型的扫描仪,

if (this._twain32.Capabilities.Duplex.IsSupported(TwQC.GetCurrent) && this._twain32.Capabilities.Duplex.GetCurrent() != TwDX.None)
                
                    if (this._twain32.Capabilities.FeederEnabled.IsSupported(TwQC.Set))
                    
                        this._twain32.Capabilities.FeederEnabled.Set(true);

                        if (this._twain32.Capabilities.DuplexEnabled.IsSupported(TwQC.Set))
                        
                            this._twain32.Capabilities.DuplexEnabled.Set(true);
                        
                        this._twain32.Capabilities.XferCount.Set(-1);
                    
                

以上代码使用 Saraff.Twain(free) dll 作为参考。

我知道它的老问题,但这会对刚接触 TWAIN 的人有所帮助。

【讨论】:

以上是关于如何在 TWAIN 用户界面 (DS) 中修改分辨率 (DPI) 范围的主要内容,如果未能解决你的问题,请参考以下文章

用户取消时 TWAIN 阻塞

TWAIN 示例数据源

Python3 或 C/C++:TWAIN 接口

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

java Twain 直接打印/界面打印

在 .NET 中使用 TWAIN - 寻找资源 [关闭]