最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

Twain 開(kāi)發(fā)簡(jiǎn)介

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

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

  • Application software

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

  • Source Manager software

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

  • Source software

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

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

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

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

Twain通訊過(guò)程

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

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

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

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

操作的數(shù)據(jù)組(DG_)
操作的數(shù)據(jù)參數(shù)類(lèi)型(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)用程序、源管理器和源必須通信來(lái)管理數(shù)據(jù)的獲取。這個(gè)過(guò)程必須以特定的順序發(fā)生,這是合乎邏輯的。例如,在加載源管理器并準(zhǔn)備好進(jìn)行請(qǐng)求通信之前,應(yīng)用程序無(wú)法成功地請(qǐng)求來(lái)自源的數(shù)據(jù)傳輸。為了保證序列的正確執(zhí)行,TWAIN協(xié)議定義了在TWAIN會(huì)話(huà)中存在的七種狀態(tài)。會(huì)話(huà)是應(yīng)用程序通過(guò)源管理器連接到特定源的時(shí)間段。
應(yīng)用程序連接到源管理器的期間是一個(gè)唯一的會(huì)話(huà),Source Manager和Source的TWAIN元素都占據(jù)一個(gè)特定的狀態(tài)。到新?tīng)顟B(tài)的轉(zhuǎn)換是由應(yīng)用程序或源請(qǐ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 - 打開(kāi)source manager
State 3 - 選擇 Source
State 3 to 4 - 打開(kāi) Source
State 4 - 設(shè)置source的Capabilities
State 4 to 5 - 請(qǐng)求從source獲取數(shù)據(jù)
State 5 to 6 - 數(shù)據(jù)可以準(zhǔn)備消息
State 6 to 7 - 開(kāi)始數(shù)據(jù)傳輸
State 7 to 6 to 5 - 完成傳輸
State 5 to 1 - 斷開(kāi)連接

C# 調(diào)用

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

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

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

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

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

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

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

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

使用如下代碼new一個(gè)多圖像輸出功能對(duì)象,然后像其它一樣設(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)用掃描儀的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • WPF制作帶小箭頭的按鈕完整代碼

    WPF制作帶小箭頭的按鈕完整代碼

    WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶(hù)界面框架。下面通過(guò)本文給大家介紹WPF制作帶小箭頭的按鈕完整代碼,需要的朋友參考下吧
    2017-12-12
  • C#實(shí)現(xiàn)簡(jiǎn)易點(diǎn)餐功能

    C#實(shí)現(xiàn)簡(jiǎn)易點(diǎn)餐功能

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)易點(diǎn)餐功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C# WinForm制作登錄界面的實(shí)現(xiàn)步驟

    C# WinForm制作登錄界面的實(shí)現(xiàn)步驟

    本文主要介紹了C# WinForm制作登錄界面的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C#實(shí)現(xiàn)Array,List,Dictionary相互轉(zhuǎn)換

    C#實(shí)現(xiàn)Array,List,Dictionary相互轉(zhuǎn)換

    這篇文章介紹了C#實(shí)現(xiàn)Array,List,Dictionary互相轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#彩色圖片灰度化算法實(shí)例

    C#彩色圖片灰度化算法實(shí)例

    這篇文章主要介紹了C#彩色圖片灰度化算法,以實(shí)例形式對(duì)灰度化算法進(jìn)行了較為詳細(xì)的介紹,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#獲取目錄最后訪(fǎng)問(wèn)時(shí)間的方法

    C#獲取目錄最后訪(fǎng)問(wèn)時(shí)間的方法

    這篇文章主要介紹了C#獲取目錄最后訪(fǎng)問(wèn)時(shí)間的方法,涉及C#中LastAccessTime方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • C#中Invoke的具體使用

    C#中Invoke的具體使用

    本文主要介紹了C#中Invoke的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • c# 實(shí)現(xiàn)漢諾塔游戲

    c# 實(shí)現(xiàn)漢諾塔游戲

    這篇文章主要介紹了c# 實(shí)現(xiàn)漢諾塔游戲的示例,幫助大家更好的理解和使用c# 編程語(yǔ)言,感興趣的朋友可以了解下
    2020-11-11
  • winform用datagridview制作課程表實(shí)例

    winform用datagridview制作課程表實(shí)例

    這篇文章主要介紹了winform用datagridview制作課程表的方法,實(shí)例分析了WinForm實(shí)現(xiàn)課程表的結(jié)構(gòu)、數(shù)據(jù)庫(kù)及調(diào)用技巧,需要的朋友可以參考下
    2015-01-01
  • C# 創(chuàng)建、部署和調(diào)用WebService簡(jiǎn)單示例

    C# 創(chuàng)建、部署和調(diào)用WebService簡(jiǎn)單示例

    這篇文章主要為大家詳細(xì)介紹了C# 創(chuàng)建、部署和調(diào)用WebService的簡(jiǎn)單示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評(píng)論

汝城县| 双桥区| 嘉定区| 大渡口区| 沾益县| 水富县| 潼关县| 宣汉县| 元谋县| 红原县| 广昌县| 余江县| 西华县| 鹿邑县| 恩平市| 黄大仙区| 木兰县| 洛南县| 靖安县| 安阳县| 莫力| 额济纳旗| 越西县| 阿尔山市| 姚安县| 西丰县| 雷州市| 怀来县| 新田县| 台东县| 武胜县| 承德县| 鹤壁市| 修文县| 普陀区| 毕节市| 深州市| 延寿县| 东明县| 潮州市| 石渠县|