C# Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

C#基于Twain协议开发一个高扫仪对接功能 请先安装TwainDotNet。 阅读详情
AI摘要

本文详细介绍了TWAIN协议的作用和原理,它为应用程序与图像采集设备(如扫描仪)之间的通信提供了标准。TWAIN包含Application Software、Source Manager Software和Source Software三个关键部分,通过DSM_Entry()函数进行通信。在C#中,可以使用NTwain库操作TWAIN源。在遇到不遵循标准的设备功能(如富士通的多图像输出)时,需要直接与设备驱动交互。文章还提到了状态管理和具体操作流程,以及如何在C#中实现TWAIN功能,如设置扫描仪的双面扫描。

Twain

随着扫描仪、数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值。然而,支持这种光栅数据的显示和操作成本很高,应用程序开发人员需要创建用户界面并内置设备控制各种各样可用的图像设备。
一旦他们的应用程序准备好支持给定的设备,他们就会面临一个令人沮丧的现实:设备不断地升级新的功能和特性。应用程序开发人员发现他们不断地修改他们的产品,以保持最新图像采集设备和软件应用程序的开发人员都认识到需要图像设备和应用程序之间的标准通信。一个标准有利于使用他们产品的用。它将允许更多的应用程序访问设备供应商的产品,而应用程序供应商可以访问来自这些设备的数据,而不需要关心提供这些数据的是哪种类型的设备或特定的设备。
TWAIN的开发正是出于对一致性和简化的需要。

Twain 开发简介

TWAIN定义了一个标准的软件协议和API(应用程序编程接口),用于在软件应用程序和图像采集设备(数据的来源)之间进行通信。
Twain的三个关键要素是:

  • Application software
    必须修改应用程序才能使用TWAIN。
  • Source Manager software
    该软件管理应用程序和源程序之间的交互。这段代码在TWAIN开发者的工具包中提供,每个TWAIN应用程序和源代码都应该免费提供。
  • Source software
    该软件控制图像采集设备,由设备开发人员按照TWAIN规范编写。传统的设备驱动程序现在包含在源软件中,不需要由应用程序提供。

关于这几要素是什么关系呢?通俗的说就是Twain是一个协议,这个协议不需要我们自己去实现和设备(我这里是扫描仪)的通讯,这个通讯是由一个叫做Data Source Manager的来提供,我们的应用程序只需要调用Data Source Manager对应的功能,然后由Data Source Manager去负责和支持Twain协议的设备通讯(准确的说应该是设备的驱动)。

这个Data Source Manager 在windows里面就是由twain_32.dll实现。

Twain协议PDF https://ask.qcloudimg.com/draft/7651952/jhzuki5dnp.pdf

Twain通讯过程

TWAIN元素之间的通信可以通过两个入口点实现。他们是DSM_Entry()和DS_Entry()。DSM指数据源管理器(也就是twain_32.dll),DS指数据源(驱动程序)。

应用程序的目标是从源获取数据。但是应用程序不能直接调用源。所有对数据、功能信息、错误信息等的请求都必须通过源管理器处理。

Twain定义了大约140个操作。应用程序将它们发送到源管理器进行传输。应用程序指定哪个元素(源管理器或源)是每个请求操作的最终目的地。
应用程序通过源管理器唯一的入口点DSM_Entry()函数与源管理器通信。DSM_Entry函数的参数列表包含:

  • 一个标识符结构,提供关于发起函数调用的应用程序的信息。
  • 请求的目的地(源管理器或源)。
  • 描述请求操作的三元组(triplet)。三元组指:
    操作的数据组(DG_)
    操作的数据参数类型(DAT_)
    操作的消息(MSG_)
  • 函数调用返回一个值(返回码),指示操作的成功或失败。
TW_UINT16 TW_CALLINGSTYLE DSM_Entry
    (   pTW_IDENTITY pOrigin, // source of message
        pTW_IDENTITY pDest, // destination of message
        TW_UINT32 DG, // data group ID: DG_xxxx
        TW_UINT16 DAT, // data argument type: DAT_xxxx
        TW_UINT16 MSG, // message ID: MSG_xxxx
        TW_MEMREF pData // pointer to data
    );

Twain状态

应用程序、源管理器和源必须通信来管理数据的获取。这个过程必须以特定的顺序发生,这是合乎逻辑的。例如,在加载源管理器并准备好进行请求通信之前,应用程序无法成功地请求来自源的数据传输。为了保证序列的正确执行,TWAIN协议定义了在TWAIN会话中存在的七种状态。会话是应用程序通过源管理器连接到特定源的时间段。
应用程序连接到源管理器的期间是一个唯一的会话,Source Manager和Source的TWAIN元素都占据一个特定的状态。到新状态的转换是由应用程序或源请求的操作引起的,转换可以向前或向后进行。大多数转换都是单状态转换。
转换状态图如下:

State 1 to 2 -加载source manager 获取 DSM_Entry接口
State 2 to 3 - 打开source manager
State 3 - 选择 Source
State 3 to 4 - 打开 Source
State 4 - 设置source的Capabilities
State 4 to 5 - 请求从source获取数据
State 5 to 6 - 数据可以准备消息
State 6 to 7 - 开始数据传输
State 7 to 6 to 5 - 完成传输
State 5 to 1 - 断开连接

C# 调用

应用程序调用Source Manager,使用NTwain进行操作,在nuget里面添加引用。

对应的github地址,里面有源码和demo: https://github.com/soukoku/ntwain/tree/v3
添加引用后打开source manager,然后可以选择Source 或者加载默认Source。

打开Source后状态为4 则我们可以对设备进行设置,而设置这些功能存在于许多种类中,但都有默认值、当前值和可能的值
其他可选的可支持的值。这些种类可以在协议里面查到,也就是驱动里面对应的各种设置。在Twain协议里面把这些功能叫做Capabilities ,对应的NTwain包里面也封装了,比如设置扫描仪双面扫描

_twain.CurrentSource.Capabilities.CapDuplexEnabled.SetValue(BoolType.True);

关于富士通fujitsu设置图像模式:多图像输出

这里有个大坑,在使用NTwain设置的时候通过CapPixelType设置图像模式只能设置黑白灰度彩色三种,通过如下代码:

_twain.CurrentSource.Capabilities.ICapPixelType.SetValue(PixelType.RGB)

不能设置多图输出,在驱动里面找看到图片确实只支持这几种方式,然后我一直以为是我看掉了哪个功能,看完了Twain协议,然后去网上各种找没有这方面的资料,大部分都是很简单的介绍,纠结了一周没有搞清楚。然后搜到vintasoft 这个网站的时候看到一个提问才恍然大悟,原来这个设置Twain标准协议里面确实没有这个,我估计是富士通厂家自己搞的一个。因为上面Twain通讯过程说了各种操作只能通过DSM_Entry()函数,并且只要你传入的三元组的( TW_UINT16 DAT,// data argument type: DAT_xxxx) Id正确且支持就行了。

使用如下代码new一个多图像输出功能对象,然后像其它一样设置即可。

new CapWrapper<MutilImageOutPutType>(dataSource, (CapabilityId)0x80f2, ValueExtensions.ConvertToEnum<MutilImageOutPutType>,
                    value => new TWOneValue
                    {
                        Item = (uint)value,
                        ItemType = ItemType.UInt16
                    });
public enum MutilImageOutPutType : ushort
    {
        Disabled = 0,
        RGBAndBW = 1,
        BWAndRGB = 2,
        Enabled = 3,
        Auto = 4,
    }

最后扫描获取图片

TWAIN协议学习笔记 TWAIN定义了图像设备(扫描仪,数码相机)和应用之间相互通信的协议,各个设备厂商通过支持TWAIN协议使得上层应用可以用同样的代码去访问不同扫描仪 TWAIN主要包括三个要素: Application - 使用TWAIN的图像应用,如Photoshop, Source Manager - 用来管理数据源和应用之间的交互,这个模块由TWAIN Group来维护,并提供开源代码(https:/... 阅读详情

相关推荐

c#使用扫描仪

最近有个项目,需呀调用扫描仪。 我们这里使用微软wia组件,调用扫描仪,去扫描图像。 先引用这个组件,这个组件是个com组件。 调用扫描仪的代码,很简单,返回一个ImageFile接口。这个ImageFile就是扫描后的图像文件。 public ImageFile Scan() { ImageFile image; try { Common

xsi64的专栏 9217

C#Twain.zip

C#基于twain协议连接扫描仪,实现扫描仪控制解决方案,重新封装自定义界面,提供选择扫描设备,可以对单双面打印,设置黑白或纸张大小、分辨率,等属性进行自定义设置。

推荐文章:NTwain——您的.NET世界与TWAIN世界的桥梁

推荐文章:NTwain——您的.NET世界与TWAIN世界的桥梁 ntwain A TWAIN lib for dotnet. 项目地址: https://gitcode.com/gh_mirrors/nt/ntwain ...

gitblog_00095的博客 812

ntwain:TWAIN的dotnet库

TWAIN应用程序侧库 注意:这是从v4开发者的迁移而来的。 信息 这是一个创建的库,以使在dotnet中可以使用接口。 该项目具有以下功能/目标: 针对最新的TWAIN版本(截至撰写本文时为2.3) 支持规范中的所有TWAIN功能。 可以承载一个内部消息循环,因此无需连接到应用程序UI线程。 该解决方案包含winform,wpf甚至控制台用法的测试器项目。 也nuget软件包(注意:此文档描述了v3。对于较旧的版本,请转至Source并选择v2分支作为其文档。) 使用lib 要正确使用此库,您需要相当熟悉TWAIN规范,并了解它的总体工作原理(尤其是功能)。 TWAIN规范可以从下载。 除了已经用.net等价物抽象出来的那些外,大多数三元组操作都是按原样提供的,因此您将需要知道何时以及如何使用它们。 没有高级的“现在为我扫描页面”功能。 要使用的主要类是TwainSessi

Twain、Wia两种扫描方式DEMO

C#语言,基于Twain、Wia两种操作扫描仪的方式,适合初学者了解扫描方法

C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

出处:https://www.cnblogs.com/SunSpring Twain 随着扫描仪、数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值。然而,支持这种光栅数据的显示和操作成本很高,应用程序开发人员需要创建用户界面并内置设备控制各种各样可用的图像设备。 一旦他们的应用程序准备好支持给定的设备,他们就会面临一个令人沮丧的现实:设备不断地升级新的功能和特性。应用程序开发人员发现他们不断地修改他们的产品,以保持最新图像采集设备和软件应用程序的开发人员都认识到需要

chinaherolts2008的博客 1702

c# winform twain文件扫描并保存成图片

C# winform twain文件扫描并保存成图片可支持佳能扫描仪

c#连接扫描仪,操作扫描仪

什么是TWAIN? TWAIN(全写:Technology Without An Interesting Name)是一个软件和数码相机、扫描仪等图像输入设备之间的通讯标准。 简单的说 TWAIN是通用的扫描仪标准,我们使用TWAIN标准操作扫描仪 使用的框架:https://github.com/soukoku/ntwain/tree/v3 相关代码 #!c# // can use the ut...

weixin_41746243的博客 2555

NTwainSource_ntwain_NTwain源代码和扫描实例_programhk1_

通用twain接口图像采集,NTwain源代码和扫描实例

AgentScope实战指南:从源码解析到Qwen模型的多Agent协作开发

本文提供了AgentScope多智能体开发框架的实战指南,详细解析了其核心架构与工作原理,并展示了如何利用Qwen模型构建从单智能体对话到多智能体协作的完整应用。通过两个具体代码实例,指导开发者快速上手环境配置、模型接入与智能体编排,实现高效的多Agent系统开发。

ff678的博客 640

开源项目NTwain常见问题解决方案

开源项目NTwain常见问题解决方案 1. 项目基础介绍和主要编程语言 NTwain是一个开源项目,旨在为.NET环境提供TWAIN接口的支持。TWAIN是一个跨平台的接口标准,它允许应用程序与扫描仪、摄像头等图像捕获设备进行通信。NTwain项目支持最新的TWAIN版本,并提供了一个内部消息循环,无需将UI线程与TWAIN交互挂钩。项目支持多种编程环境,包括WinForms、WPF以及控制台应用...

gitblog_00583的博客 699

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 608

《.NET中扫描仪控制的实现》

源码及应用实例我放入我的资源中摘要在windows图象应用程序中,用于扫描的主要API是TWAIN www.twain.org .不幸的,是新的.NET Freamework框架没有内置支持TWAIN.因此,我们必须去写一个方法去使.NET下可以使用这个API。这个简单的代码包含的不是最终的功能介绍,只是一些并于.NET应用开发的TWAIN编程基本的步骤祥细设计第一步是最重要的

yegreen的专栏 4091

机器学习系列(1)_逻辑回归初步

1、总述 逻辑回归是应用非常广泛的一个分类机器学习算法,它将数据拟合到一个logit函数(或者叫做logistic函数)中,从而能够完成对事件发生的概率进行预测。 2、由来     要说逻辑回归,我们得追溯到线性回归,想必大家对线性回归都有一定的了解,即对于多维空间中存在的样本点,我们用特征的线性组合去拟合空间中点的分布和轨迹。如下图所示:     线性回归能对连续值结果进行预测,

寒小阳 13万+

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 282

TWAIN协议(Toolkit Without An Interesting Name)

TWAIN指TWAIN协议,是应用软件从计算机外设获取静态图像的国际标准。   TWAIN是一项重要的接口标准,为软件开发商和硬件设备生产厂商之间提供了一个统一的规范,以有效地避免系统及设备之间的不兼容问题。TWAIN协议为操作系统提供了软件支持,使得符合TWAIN协议的软

丰空岛主(Vega Prime,Android,LabWindows,ThreeJS,Python,OpenCV) 4177

9、傅里叶变换:连续时间与离散时间信号分析的核心工具

本文深入探讨了傅里叶变换在连续时间和离散时间信号分析中的核心作用,详细介绍了连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)的定义、性质及其应用。文章涵盖了傅里叶级数到傅里叶变换的推导过程、常见变换对、系统分析中的关键性质,并讨论了采样后频谱的周期延拓与混叠问题。此外,还展示了傅里叶变换在滤波器设计、通信系统调制解调等实际场景中的应用,最后展望了其在图像处理、生物医学等领域的广阔前景。

jump7的博客 66

C# 使用TWAIN协议进行扫描仪操作

简单方式:转载https://www.cnblogs.com/Peter-Luo/archive/2012/07/06/2579720.html public ArrayList TransferPictures() { ArrayList pics = new ArrayList(); if (srcds.Id == IntPtr

梁中林 的专栏 7876

Python 爬虫实战:全球渔业船舶捕捞记录数据采集与分析全攻略

通过本项目,我们实现了对全球渔业船舶捕捞记录数据的采集、处理和可视化,为渔业资源管理和海洋生态保护提供了数据支持。未来,可以进一步结合机器学习和深度学习技术,对捕捞行为进行预测和分类,提高对非法捕捞活动的识别能力。

2201_76125261的博客 554

在 SAP GUI Editor 中使用 OpenAI 自动生成 ABAP 代码 —— 技术实践与思考

在传统 SAP GUI Editor 场景下融入OpenAI开发者表达意图,模型负责实现。随着的持续演进,以及Joule等官方 Copilot 的加入,未来 ABAP 开发形态必将更加专注业务逻辑与架构设计,而把样板式编码交给 AI 自动完成。现在就动手试试,让你的下一段 ABAP 由 AI 来书写吧!

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 706

【免费下载】 NTWAIN 开源项目教程

NTWAIN 是一个开源的 .NET 库,旨在简化与 TWAIN 兼容的扫描仪和相机设备的集成。TWAIN 是一个广泛使用的协议,用于在应用程序和图像获取设备之间进行通信。NTWAIN 提供了一个易于使用的 API,使得开发者可以轻松地在 .NET 应用程序中集成图像获取功能。 ## 2. 项目快速启动 ### 安装 首先,通过 NuGet 包管理器安装 NTWAIN: ```bash d...

gitblog_00423的博客 1421

(王道计算机组成原理笔记)第一章计算机系统概述-第二节:计算机系统层次结构 1(计算机系统组成、计算机硬件)

文章目录一:冯诺依曼体系结构(1)存储程序计算机(2)层次结构二:计算机硬件概述(1)存储器A:存储元、存储单元、存储体、存储字和存储字长B:MAR 一:冯诺依曼体系结构 在冯诺依曼体系结构中,计算机的硬件主要有**存储器,运算器,控制器,输入和输出设备(也叫做I/O设备)**组成。 (1)存储程序计算机 冯诺依曼体系结构也叫做存储程序计算机,计算器和计算机的唯一区别就是计算器是不能编程的,只能做电路板中设定好的固定的运算。 这也就意味着计算器本质就是一个不能编程的计算机,其在硬件层面已经将逻辑写死,如果

快乐江湖的博客 1万+

C# Winform 从扫描仪获取图片 并导出为PDF

最近在做一个科研档案管理系统的项目,需要能够直接调用扫描仪进行扫描。扫描仪又分为是否有进稿器(批量扫描和一张一张扫描),进稿器模式使用twain协议就可以做,直接可以得到PDF文件,这个网上有很多案例我也没做什么创新,就不写了。另外一种方式因为扫描仪没有进稿器,一次只能扫描一张图像,所以可以是利用WIA获取图像,保存在临时文件夹下,然后最后再转为PDF导出。这篇文章说的就是这种方法。 ...

JXMaker 5826

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: WinForm引用ActiveX组件,对Com组件的学
X_SpringSun
博客等级 码龄14年 17粉丝 25原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值