全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3227
推到 Plurk!
推到 Facebook!

在Delphi中控制掃描器

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-25 14:10:22 IP:61.221.xxx.xxx 未訂閱
此為囀貼資料 在Delphi中控制掃描器 ---- 在利用Delphi開發資訊管理系統時,常常要處理圖像,這也是資訊管理系統發展的必然趨勢。怎樣在Delphi中通過掃描器獲得所需的圖像資訊呢?不外乎有三種基本的方法: 通過圖像處理軟體,比如說Photoshop等,通過它們的掃描圖像的功能,加工成一定格式的圖像後再在自己的系統中利用; 通過掃描器介面Twain.DLL 。該介面是在安裝掃描器時提供的,它實際上是一個Plugin插件,它通過一系列函數來控制掃描器; 通過構件技術來控制掃描器。 ---- 利用第一種方法能減少編程的複雜度,但是系統的集成度不高,用戶使用上也不方便;第二種方法能在驅動程式級直接控制掃描器,能在編程上提供最大的靈活性和可控性;第三種方法能充分利用Delphi的視覺化構件技術,安全、靈活、自由地利用掃描器。其實第三種方法也是建立在掃描器介面Twain.DLL之上的。本文論述的方法就採用第三種。 ---- Windows9X在其附件中提供了“映象”可選件,該附件是採用OCX構件來控制掃描器的,共有imgEdit、imgAnntool、imgScan、imgAdmin 四個,有這四個構件基本上就能完全控制掃描器。在Delphi中的用法如下: 在Windows9x中選擇安裝“映象”。(在控制面板中選擇“添加/刪除程式”,再選擇“安裝Windows”,點擊“附件”核取方塊,然後從“詳細資料”按鈕中可以找到“映象”) ?動Delphi,選擇“Component”功能表項下的“Import ActiveX Control”,這時可以看到列表中有“Wang 圖像編輯控制、Wang 圖像掃描控制、Wang 圖像管理控制、Wang 圖像縮略圖控制”,選中這四項,然後點擊“Install”按鈕,這時在構件面板上的ActiveX舌標下就可以看到這四個構件的圖示。 ---- ImgScan 的主要屬性:FileType:圖像的文件類型(該構件支援三種:TIFF,BMP,AWD); ScanTo:返回或設置被掃描圖像的目的; 可取值 含義 0 (缺省) 顯示被掃描的圖像. 1 顯示被掃描的圖像並寫入一個文件. 2 把圖像寫入一個文件 3 以模板方式把圖像寫入文件並顯示. 4 . 以模板方式把圖像寫入文件 5 傳真被掃描的圖像 注意:如果取缺省值0, 必須和 Wang ImgEdit 構件配合使用。 DestImageControl:Wang ImgEdit構件名; Zoom:圖像的放縮比例 ImgScan 的主要方法:OpenScanner :打開掃描器; CloseScanner :關閉掃描器; StartScan : 開始掃描; StopScan : 停止掃描 ---- ImgEdit 的屬性主要是控制掃描圖像的解析度、圖像的寬高、是否允許對圖像進行局部選 擇等;其方法主要有拷貝、剪切圖像到粘貼板,從粘貼板複製圖像,旋轉、放縮、 鏡象圖像;列印、保存、刷新圖像等。 ---- 關於上述四個OCX構件的詳細使用說明可在Delphi中查看其自帶的幫助系統。 ---- 下面是使用這兩個構件的一些例子: procedure Tscanf.N1Click(Sender: TObject); begin ImgScan1.ShowSelectScanner; //選擇系統中已安裝的掃描器 end; procedure Tscanf.N2Click(Sender: TObject); begin imgedit1.zoom:=100; //設置圖像的放縮因數 if not imgscan1.ScannerAvailable then //如果選擇的掃描器不可用 imgscan1.OpenScanner;//打開掃描器 imgscan1.StartScan; //開始掃描圖像 imgscan1.CloseScanner; //關閉掃描器 end; procedure Tscanf.N8Click(Sender: TObject); begin if (imgedit1.IsClipboardDataAvailable and imgedit1.ImageDisplayed ) then imgedit1.ClipboardPaste(selleft,seltop); //從剪貼板粘貼圖像,其參數?Imgedit的顯示區域的起始座標 end; procedure Tscanf.N1801Click(Sender: TObject); begin if imgedit1.ImageDisplayed then imgedit1.Flip; //鏡象圖像 end; procedure Tscanf.N901Click(Sender: TObject); begin if imgedit1.ImageDisplayed then imgedit1.RotateRight //向右旋轉圖像 end; procedure Tscanf.N6Click(Sender: TObject); begin imgedit1.DrawSelectionRect(selleft, seltop,selwidth,selheight);//進行圖像局部選擇 imgedit1.ClipboardCut(selleft,seltop, selwidth,selheight);//剪切所選區域 end; ---- 注意:在DELPHI中使用Imgedit構件的拷貝和剪切功能時,會出現以下問題: ---- 1、 如果把整幅圖像都選中,沒有任何問題; ---- 2、 如果選擇了局部區域,則拷貝和剪切的區域會發生漂移; ---- 3、 如果DELPHI做的是MS SQL後端資料庫的用戶端介面,那?在把圖像內容寫入資料庫的圖像欄位中時,BDE(資料庫引擎)會報錯。這是DELPHI3。0和4。0的BUG,4。0的升級包可以解決這個問題。 ---- 至於第二個問題,可這樣解決:在Imgedit的onSelectionRectDrawn事件中寫一段代碼,把選擇區域的邊界值保存到四個總體變數中,在拷貝和剪切之前用先前保存的變數再進行一次選擇即可(當然,這一切都在後臺進行的,見前面的例子)。 ---- 開發環境:DELPHI4。0,HP ScanJet 4P掃描器; 發表人 - jackkcg 於 2002/10/25 14:11:27
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
oasis
一般會員


發表:22
回覆:10
積分:6
註冊:2002-11-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-25 15:22:55 IP:61.190.xxx.xxx 未訂閱
朋友: 你好! 我在你的网站中的周边设备讨论区中看到了一篇关于这个主题的说明。 但是用此种方法,完成扫描是没问题的,但是不能实现对扫描的图进行 先选择,再复制或粘贴。总报错。 你可以做个小小的示范程序贴出来吗? 我用的是delphi6.0 不会是因为这个就报错的吧
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-25 22:19:38 IP:210.65.xxx.xxx 未訂閱
朋友: oasis 大大你好! 我看不懂簡體 所以我將站長範例給你看看 你試看看 影像截取軟體(適用數位攝影機/掃瞄器/截取卡) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=17871
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-26 09:16:52 IP:61.218.xxx.xxx 未訂閱
WIN2000 是否也適用?
------
︿︿
mamahe
一般會員


發表:0
回覆:1
積分:0
註冊:2003-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-02 17:41:54 IP:61.159.xxx.xxx 未訂閱
我也遇到同样问题不能在imgedit中显示,你的范例好像没有用到imgedit和imgscan,请版主讲一讲。 谢谢
arthurJ
一般會員


發表:0
回覆:3
積分:0
註冊:2003-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-14 17:37:27 IP:61.64.xxx.xxx 未訂閱
>我也遇到同样问题不能在imgedit中显示,你的范例好像没有用到imgedit和>imgscan,请版主讲一讲。 谢 要跟imgedit 一起顯示需要自己在加一行code 在vb 上是不用的它會自己對映出來 谢
reebokmonkey
一般會員


發表:44
回覆:73
積分:23
註冊:2003-08-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-29 11:04:56 IP:61.149.xxx.xxx 未訂閱
扫描出来的不是很清楚!请问有没有什么办法
stone_chao
一般會員


發表:0
回覆:1
積分:0
註冊:2003-09-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-14 22:49:49 IP:210.201.xxx.xxx 未訂閱
各位先進好 請容我問個蠢問題. 請問Lee兄慷慨提供的程式 (http://delphi.ktop.com.tw/topic.php?TOPIC_ID=17871) 如何指定影像裝置的對應. 因為我試用了一下. 雖然有接上scanner, 但裝置編號無論選啥都不會有影像 是不是有什麼前置步驟要設定呢? (我的scanner確定是可以作用的, 因為從ACDsee裡可以叫用到) 我使用window附的Kodak imaging component , 只能像ACDsee一樣從程式叫起來scanner附的介面. 請問是否可以不要show scanner的UI, 直接由我的程式控制, 掃描圖檔的某一區塊(exp, 左上角20 x 30 cm的區塊) 因為我想要做到完全的自動化 不需要使用者人為介入. 謝謝各位提撥指點. 萬分感激~
系統時間:2024-03-29 16:53:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!