欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#基于Twain協(xié)議調(diào)用掃描儀,設(shè)置多圖像輸出模式(Multi image output)

 更新時(shí)間:2021年01月29日 08:46:40   作者:XSpringSun  
這篇文章主要介紹了C#基于Twain協(xié)議調(diào)用掃描儀,設(shè)置多圖像輸出模式(Multi image output)的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

出處:https://www.cnblogs.com/SunSpring

Twain

隨著掃描儀、數(shù)碼相機(jī)和其他圖像采集設(shè)備的引入,用戶熱切地發(fā)現(xiàn)了將圖像整合到他們的文檔和其他工作中的價(jià)值。然而,支持這種光柵數(shù)據(jù)的顯示和操作成本很高,應(yīng)用程序開發(fā)人員需要創(chuàng)建用戶界面并內(nèi)置設(shè)備控制各種各樣可用的圖像設(shè)備。
一旦他們的應(yīng)用程序準(zhǔn)備好支持給定的設(shè)備,他們就會面臨一個(gè)令人沮喪的現(xiàn)實(shí):設(shè)備不斷地升級新的功能和特性。應(yīng)用程序開發(fā)人員發(fā)現(xiàn)他們不斷地修改他們的產(chǎn)品,以保持最新圖像采集設(shè)備和軟件應(yīng)用程序的開發(fā)人員都認(rèn)識到需要圖像設(shè)備和應(yīng)用程序之間的標(biāo)準(zhǔn)通信。一個(gè)標(biāo)準(zhǔn)有利于使用他們產(chǎn)品的用。它將允許更多的應(yīng)用程序訪問設(shè)備供應(yīng)商的產(chǎn)品,而應(yīng)用程序供應(yīng)商可以訪問來自這些設(shè)備的數(shù)據(jù),而不需要關(guān)心提供這些數(shù)據(jù)的是哪種類型的設(shè)備或特定的設(shè)備。
TWAIN的開發(fā)正是出于對一致性和簡化的需要。

Twain 開發(fā)簡介

TWAIN定義了一個(gè)標(biāo)準(zhǔn)的軟件協(xié)議和API(應(yīng)用程序編程接口),用于在軟件應(yīng)用程序和圖像采集設(shè)備(數(shù)據(jù)的來源)之間進(jìn)行通信。

Twain的三個(gè)關(guān)鍵要素是:

  • Application software

必須修改應(yīng)用程序才能使用TWAIN。

  • Source Manager software

該軟件管理應(yīng)用程序和源程序之間的交互。這段代碼在TWAIN開發(fā)者的工具包中提供,每個(gè)TWAIN應(yīng)用程序和源代碼都應(yīng)該免費(fèi)提供。

  • Source software

該軟件控制圖像采集設(shè)備,由設(shè)備開發(fā)人員按照TWAIN規(guī)范編寫。傳統(tǒng)的設(shè)備驅(qū)動程序現(xiàn)在包含在源軟件中,不需要由應(yīng)用程序提供。

關(guān)于這幾要素是什么關(guān)系呢?通俗的說就是Twain是一個(gè)協(xié)議,這個(gè)協(xié)議不需要我們自己去實(shí)現(xiàn)和設(shè)備(我這里是掃描儀)的通訊,這個(gè)通訊是由一個(gè)叫做Data Source Manager的來提供,我們的應(yīng)用程序只需要調(diào)用Data Source Manager對應(yīng)的功能,然后由Data Source Manager去負(fù)責(zé)和支持Twain協(xié)議的設(shè)備通訊(準(zhǔn)確的說應(yīng)該是設(shè)備的驅(qū)動)。

這個(gè)Data Source Manager 在windows里面就是由twain_32.dll實(shí)現(xiàn)。

Twain協(xié)議PDF https://ask.qcloudimg.com/draft/7651952/jhzuki5dnp.pdf

Twain通訊過程

TWAIN元素之間的通信可以通過兩個(gè)入口點(diǎn)實(shí)現(xiàn)。他們是DSM_Entry()和DS_Entry()。DSM指數(shù)據(jù)源管理器(也就是twain_32.dll),DS指數(shù)據(jù)源(驅(qū)動程序)。

應(yīng)用程序的目標(biāo)是從源獲取數(shù)據(jù)。但是應(yīng)用程序不能直接調(diào)用源。所有對數(shù)據(jù)、功能信息、錯誤信息等的請求都必須通過源管理器處理。

Twain定義了大約140個(gè)操作。應(yīng)用程序?qū)⑺鼈儼l(fā)送到源管理器進(jìn)行傳輸。應(yīng)用程序指定哪個(gè)元素(源管理器或源)是每個(gè)請求操作的最終目的地。
應(yīng)用程序通過源管理器唯一的入口點(diǎn)DSM_Entry()函數(shù)與源管理器通信。DSM_Entry函數(shù)的參數(shù)列表包含:

  • 一個(gè)標(biāo)識符結(jié)構(gòu),提供關(guān)于發(fā)起函數(shù)調(diào)用的應(yīng)用程序的信息。
  • 請求的目的地(源管理器或源)。
  • 描述請求操作的三元組(triplet)。三元組指:

操作的數(shù)據(jù)組(DG_)
操作的數(shù)據(jù)參數(shù)類型(DAT_)
操作的消息(MSG_)

  • 函數(shù)調(diào)用返回一個(gè)值(返回碼),指示操作的成功或失敗。
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狀態(tài)

應(yīng)用程序、源管理器和源必須通信來管理數(shù)據(jù)的獲取。這個(gè)過程必須以特定的順序發(fā)生,這是合乎邏輯的。例如,在加載源管理器并準(zhǔn)備好進(jìn)行請求通信之前,應(yīng)用程序無法成功地請求來自源的數(shù)據(jù)傳輸。為了保證序列的正確執(zhí)行,TWAIN協(xié)議定義了在TWAIN會話中存在的七種狀態(tài)。會話是應(yīng)用程序通過源管理器連接到特定源的時(shí)間段。
應(yīng)用程序連接到源管理器的期間是一個(gè)唯一的會話,Source Manager和Source的TWAIN元素都占據(jù)一個(gè)特定的狀態(tài)。到新狀態(tài)的轉(zhuǎn)換是由應(yīng)用程序或源請求的操作引起的,轉(zhuǎn)換可以向前或向后進(jìn)行。大多數(shù)轉(zhuǎn)換都是單狀態(tài)轉(zhuǎn)換。
轉(zhuǎn)換狀態(tài)圖如下:

State 1 to 2 -加載source manager 獲取 DSM_Entry接口
State 2 to 3 - 打開source manager
State 3 - 選擇 Source
State 3 to 4 - 打開 Source
State 4 - 設(shè)置source的Capabilities
State 4 to 5 - 請求從source獲取數(shù)據(jù)
State 5 to 6 - 數(shù)據(jù)可以準(zhǔn)備消息
State 6 to 7 - 開始數(shù)據(jù)傳輸
State 7 to 6 to 5 - 完成傳輸
State 5 to 1 - 斷開連接

C# 調(diào)用

應(yīng)用程序調(diào)用Source Manager,使用NTwain進(jìn)行操作,在nuget里面添加引用。

對應(yīng)的github地址,里面有源碼和demo: https://github.com/soukoku/ntwain/tree/v3
添加引用后打開source manager,然后可以選擇Source 或者加載默認(rèn)Source。

打開Source后狀態(tài)為4 則我們可以對設(shè)備進(jìn)行設(shè)置,而設(shè)置這些功能存在于許多種類中,但都有默認(rèn)值、當(dāng)前值和可能的值
其他可選的可支持的值。這些種類可以在協(xié)議里面查到,也就是驅(qū)動里面對應(yīng)的各種設(shè)置。在Twain協(xié)議里面把這些功能叫做Capabilities ,對應(yīng)的NTwain包里面也封裝了,比如設(shè)置掃描儀雙面掃描

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

關(guān)于富士通fujitsu設(shè)置圖像模式:多圖像輸出

這里有個(gè)大坑,在使用NTwain設(shè)置的時(shí)候通過CapPixelType設(shè)置圖像模式只能設(shè)置黑白灰度彩色三種,通過如下代碼:

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

不能設(shè)置多圖輸出,在驅(qū)動里面找看到圖片確實(shí)只支持這幾種方式,然后我一直以為是我看掉了哪個(gè)功能,看完了Twain協(xié)議,然后去網(wǎng)上各種找沒有這方面的資料,大部分都是很簡單的介紹,糾結(jié)了一周沒有搞清楚。然后搜到vintasoft 這個(gè)網(wǎng)站的時(shí)候看到一個(gè)提問才恍然大悟,原來這個(gè)設(shè)置Twain標(biāo)準(zhǔn)協(xié)議里面確實(shí)沒有這個(gè),我估計(jì)是富士通廠家自己搞的一個(gè)。因?yàn)樯厦鎀wain通訊過程說了各種操作只能通過DSM_Entry()函數(shù),并且只要你傳入的三元組的( TW_UINT16 DAT,// data argument type: DAT_xxxx) Id正確且支持就行了。

使用如下代碼new一個(gè)多圖像輸出功能對象,然后像其它一樣設(shè)置即可。

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,
 }

最后掃描獲取圖片

以上就是C#基于Twain協(xié)議調(diào)用掃描儀,設(shè)置多圖像輸出模式(Multi image output)的詳細(xì)內(nèi)容,更多關(guān)于C#基于Twain協(xié)議調(diào)用掃描儀的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#移除字符串中的不可見Unicode字符 案例代碼

    C#移除字符串中的不可見Unicode字符 案例代碼

    最近發(fā)現(xiàn)某個(gè)數(shù)據(jù)采集的系統(tǒng)拿下來的數(shù)據(jù),有些字段的JSON被莫名截?cái)嗔?,?dǎo)致后續(xù)數(shù)據(jù)分析的時(shí)候解析JSON失敗,這篇文章主要介紹了C#移除字符串中的不可見Unicode字符 ,需要的朋友可以參考下
    2023-02-02
  • C#使用HtmlAgilityPack抓取糗事百科內(nèi)容實(shí)例

    C#使用HtmlAgilityPack抓取糗事百科內(nèi)容實(shí)例

    這篇文章主要介紹了C#使用HtmlAgilityPack抓取糗事百科內(nèi)容的方法,實(shí)例分析了C#中HtmlAgilityPack的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#動態(tài)生成按鈕及定義按鈕事件的方法

    C#動態(tài)生成按鈕及定義按鈕事件的方法

    這篇文章主要介紹了C#動態(tài)生成按鈕及定義按鈕事件的方法,涉及C#按鈕操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#中的Image控件用法詳解與實(shí)際應(yīng)用示例

    C#中的Image控件用法詳解與實(shí)際應(yīng)用示例

    在C#應(yīng)用程序開發(fā)中,圖像顯示是一個(gè)常見的需求,無論是創(chuàng)建圖形界面還是處理圖像數(shù)據(jù),System.Windows.Controls.Image控件都是實(shí)現(xiàn)這一目標(biāo)的重要工具,本文將詳細(xì)介紹Image控件的功能、用法、優(yōu)化技巧以及一些實(shí)際應(yīng)用示例,需要的朋友可以參考下
    2024-06-06
  • C#實(shí)現(xiàn)異步的常用方式總結(jié)

    C#實(shí)現(xiàn)異步的常用方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)異步的幾個(gè)常用方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-05-05
  • C#如何實(shí)現(xiàn)圖片的剪裁并保存

    C#如何實(shí)現(xiàn)圖片的剪裁并保存

    基于c#實(shí)現(xiàn)圖片的裁剪并保存功能,實(shí)現(xiàn)方法非常簡單的,前端采用的cropper插件,但是在本文中沒有給大家多介紹,需要的朋友可以到腳本之家去查找這個(gè)插件。好了,如果大家對c#實(shí)現(xiàn)圖片裁剪并保存功能感興趣的朋友一起看看吧
    2016-11-11
  • 使用C#創(chuàng)建Windows服務(wù)的實(shí)例代碼

    使用C#創(chuàng)建Windows服務(wù)的實(shí)例代碼

    這篇文章主要介紹了使用C#創(chuàng)建Windows服務(wù)的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • C#在RichTextBox中顯示不同顏色文字的方法

    C#在RichTextBox中顯示不同顏色文字的方法

    這篇文章主要介紹了C#在RichTextBox中顯示不同顏色文字的方法,實(shí)例分析了C#中RichTextBox控件控制文字顯示效果的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C# 腳本引擎CS-Script的使用

    C# 腳本引擎CS-Script的使用

    這篇文章主要介紹了C#腳本引擎CS-Script的使用,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-12-12
  • C#實(shí)現(xiàn)簡易計(jì)算器

    C#實(shí)現(xiàn)簡易計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評論