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

C Twain协议调用扫描仪,设置多图像输出模式(Multi image output)Twain 随着扫描仪 数码相机和其他图像采集设备的引入 用户热切地发现了将图像整合到他们的文档和其他工作中的价值 然而 支持这种光栅数据的显示和操作成本很高 应用程序开发人员需要创建用户界面并内置设备控制各种各样可用的图像设备 一旦他们的应用程序准备好支持给定的设备 他们就会面临一个令人沮丧的现实 设备不断地升级新的功能和特性

大家好,我是讯享网,很高兴认识大家。

Twain

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

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//jhzuki5dnp.pdf

Twain通讯过程

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

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

  • 一个标识符结构,提供关于发起函数调用的应用程序的信息。
  • 请求的目的地(源管理器或源)。
  • 描述请求操作的三元组(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里面添加引用。

讯享网_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, } 

最后扫描获取图片

小讯
上一篇 2025-02-05 18:43
下一篇 2025-02-10 23:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43523.html