• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

        在Delphi中控制掃描儀

        在Delphi中控制掃描儀

        更新時(shí)間:2022-05-10 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

        ---- 在利用Delphi開(kāi)發(fā)信息管理系統(tǒng)時(shí),常常要處理圖象,這也是信息管理系統(tǒng)發(fā)展的必然趨勢(shì)。怎樣在Delphi中通過(guò)掃描儀獲得所需的圖象信息呢?不外乎有三種基本的方法:
        通過(guò)圖象處理軟件,比如說(shuō)Photoshop等,通過(guò)它們的掃描圖象的功能,加工成一定格式的圖象后再在自己的系統(tǒng)中利用;

        通過(guò)掃描儀接口Twain.DLL 。該接口是在安裝掃描儀時(shí)提供的,它實(shí)際上是一個(gè)Plugin插件,它通過(guò)一系列函數(shù)來(lái)控制掃描儀;

        通過(guò)構(gòu)件技術(shù)來(lái)控制掃描儀。
        ---- 利用第一種方法能減少編程的復(fù)雜度,但是系統(tǒng)的集成度不高,用戶(hù)使用上也不方便;第二種方法能在驅(qū)動(dòng)程序級(jí)直接控制掃描儀,能
        在編程上提供最大的靈活性和可控性;第三種方法能充分利用Delphi的可視化構(gòu)件技術(shù),安全、靈活、自由地利用掃描儀。其實(shí)第三種方法也
        是建立在掃描儀接口Twain.DLL之上的。本文論述的方法就采用第三種。

        ---- Windows9X在其附件中提供了“映象”可選件,該附件是采用OCX構(gòu)件來(lái)控制掃描儀的,共有imgEdit、imgAnntool、imgScan、imgAdmin 四個(gè),有這四個(gè)構(gòu)件基本上就能完全控制掃描儀。在Delphi中的用法如下: 在Windows9x中選擇安裝“映象”。(在控制面板中選擇“添加/刪除程序”,再選擇“安裝Windows”,點(diǎn)擊“附件”復(fù)選框,然后從“詳細(xì)資料”按鈕中可以找到“映象”)

        啟動(dòng)Delphi,選擇“Component”菜單項(xiàng)下的“Import ActiveX Control”,
        這時(shí)可以看到列表中有“Wang 圖象編輯控制、Wang 圖象掃描控制、Wang
        圖象管理控制、Wang 圖象縮略圖控制”,選中這四項(xiàng),然后點(diǎn)擊“Install”
        按鈕,這時(shí)在構(gòu)件面板上的ActiveX舌標(biāo)下就可以看到這四個(gè)構(gòu)件的圖標(biāo)。
        ---- ImgScan 的主要屬性:FileType:圖象的文件類(lèi)型(該構(gòu)件支持三
        種:TIFF,BMP,AWD);

        ScanTo:返回或設(shè)置被掃描圖象的目的;
        可取值 含義
        0 (缺省) 顯示被掃描的圖象.
        1 顯示被掃描的圖象并寫(xiě)入一個(gè)文件.
        2 把圖象寫(xiě)入一個(gè)文件
        3 以模板方式把圖象寫(xiě)入文件并顯示.
        4 . 以模板方式把圖象寫(xiě)入文件
        5 傳真被掃描的圖象
        注意:如果取缺省值0,
        必須和 Wang ImgEdit 構(gòu)件配合使用。
        DestImageControl:Wang ImgEdit構(gòu)件名;
        Zoom:圖象的放縮比例

        ImgScan 的主要方法:OpenScanner :打開(kāi)掃描儀;
        CloseScanner :關(guān)閉掃描儀;
        StartScan : 開(kāi)始掃描;
        StopScan : 停止掃描


        ---- ImgEdit 的屬性主要是控制掃描圖象的分辨率、圖象的寬高、是否
        允許對(duì)圖象進(jìn)行局部選 擇等;其方法主要有拷貝、剪切圖象到粘貼板,
        從粘貼板復(fù)制圖象,旋轉(zhuǎn)、放縮、 鏡象圖象;打印、保存、刷新圖象等。
        ---- 關(guān)于上述四個(gè)OCX構(gòu)件的詳細(xì)使用說(shuō)明可在Delphi中查看其自帶的
        幫助系統(tǒng)。
        ---- 下面是使用這兩個(gè)構(gòu)件的一些例子:

        procedure Tscanf.N1Click(Sender: TObject);
        begin
        ImgScan1.ShowSelectScanner;
        file://選擇系統(tǒng)中已安裝的掃描儀
        end;

        procedure Tscanf.N2Click(Sender: TObject);
        begin
        imgedit1.zoom:=100; file://設(shè)置圖象的放縮因子
        if not imgscan1.ScannerAvailable then
        file://如果選擇的掃描儀不可用
        imgscan1.OpenScanner;//打開(kāi)掃描儀
        imgscan1.StartScan; file://開(kāi)始掃描圖象
        imgscan1.CloseScanner; file://關(guān)閉掃描儀
        end;


        procedure Tscanf.N8Click(Sender: TObject);
        begin
        if (imgedit1.IsClipboardDataAvailable
        and imgedit1.ImageDisplayed ) then
        imgedit1.ClipboardPaste(selleft,seltop);
        file://從剪貼板粘貼圖象,其參數(shù)為Imgedit的顯示區(qū)域的起始坐標(biāo)
        end;

        procedure Tscanf.N1801Click(Sender: TObject);
        begin
        if imgedit1.ImageDisplayed then
        imgedit1.Flip; file://鏡象圖象
        end;

        procedure Tscanf.N901Click(Sender: TObject);
        begin
        if imgedit1.ImageDisplayed then
        imgedit1.RotateRight file://向右旋轉(zhuǎn)圖象
        end;
        procedure Tscanf.N6Click(Sender: TObject);
        begin
        imgedit1.DrawSelectionRect(selleft,
        seltop,selwidth,selheight);//進(jìn)行圖象局部選擇
        imgedit1.ClipboardCut(selleft,seltop,
        selwidth,selheight);//剪切所選區(qū)域
        end;


        ---- 注意:在DELPHI中使用Imgedit構(gòu)件的拷貝和剪切功能時(shí),會(huì)出現(xiàn)
        以下問(wèn)題:
        ---- 1、 如果把整幅圖象都選中,沒(méi)有任何問(wèn)題;
        ---- 2、 如果選擇了局部區(qū)域,則拷貝和剪切的區(qū)域會(huì)發(fā)生漂移;
        ---- 3、 如果DELPHI做的是MS SQL后端數(shù)據(jù)庫(kù)的客戶(hù)端界面,那么在把
        圖象內(nèi)容寫(xiě)入數(shù)據(jù)庫(kù)的圖象字段中時(shí),BDE(數(shù)據(jù)庫(kù)引擎)會(huì)報(bào)錯(cuò)。這是
        DELPHI3。0和4。0的BUG,4。0的升級(jí)包可以解決這個(gè)問(wèn)題。
        ---- 至于第二個(gè)問(wèn)題,可這樣解決:在Imgedit的onSelectionRectDrawn
        事件中寫(xiě)一段代碼,把選擇區(qū)域的邊界值保存到四個(gè)全局變量中,在拷貝
        和剪切之前用先前保存的變量再進(jìn)行一次選擇即可(當(dāng)然,這一切都在后
        臺(tái)進(jìn)行的,見(jiàn)前面的例子)。
        ---- 開(kāi)發(fā)環(huán)境:DELPHI4。0,HP ScanJet 4P掃描儀;

        ---- 附源代碼。
        unit scanu;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls,
        Forms, Dialogs, Menus, ScanLib_TLB, ExtCtrls, AxCtrls,
        OleCtrls, ImgeditLib_TLB;

        type
        Tscanf = class(TForm)
        MainMenu1: TMainMenu;
        F1: TMenuItem;
        N15: TMenuItem;
        N1: TMenuItem;
        N2: TMenuItem;
        N16: TMenuItem;
        N11: TMenuItem;
        N5: TMenuItem;
        C1: TMenuItem;
        N4: TMenuItem;
        E1: TMenuItem;
        N6: TMenuItem;
        N7: TMenuItem;
        N8: TMenuItem;
        N3: TMenuItem;
        N10: TMenuItem;
        N9: TMenuItem;
        N1801: TMenuItem;
        N901: TMenuItem;
        N902: TMenuItem;
        H1: TMenuItem;
        N12: TMenuItem;
        N13: TMenuItem;
        ImgEdit1: TImgEdit;
        Bevel1: TBevel;
        ImgScan1: TImgScan;
        Bevel2: TBevel;
        procedure N4Click(Sender: TObject);
        procedure N1Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure C1Click(Sender: TObject);
        procedure N8Click(Sender: TObject);
        procedure N1801Click(Sender: TObject);
        procedure N901Click(Sender: TObject);
        procedure N902Click(Sender: TObject);
        procedure N6Click(Sender: TObject);
        procedure N7Click(Sender: TObject);
        procedure ImgEdit1SelectionRectDrawn(Sender: TObject; Left,Top,
        Width, Height: Integer);
        procedure N11Click(Sender: TObject);
        private
        { Private declarations }
        public
        selleft,seltop,selwidth,selheight:integer;
        { Public declarations }
        end;
        var
        scanf: Tscanf;

        implementation

        {$R *.DFM}

        procedure Tscanf.N4Click(Sender: TObject);
        begin
        imgedit1.ClearDisplay;
        close;
        end;

        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.C1Click(Sender: TObject);
        begin
        if imgedit1.ImageDisplayed then
        begin
        imgedit1.ClearDisplay;
        imgedit1.zoom:=100;
        end;
        end;

        procedure Tscanf.N8Click(Sender: TObject);
        begin
        if (imgedit1.IsClipboardDataAvailable and imgedit1.ImageDisplayed )
        then
        imgedit1.ClipboardPaste(selleft,seltop);
        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.N902Click(Sender: TObject);
        begin
        if imgedit1.ImageDisplayed then
        imgedit1.RotateLeft;
        end;

        procedure Tscanf.N6Click(Sender: TObject);
        begin
        imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
        imgedit1.ClipboardCut(selleft,seltop,selwidth,selheight);
        end;

        procedure Tscanf.N7Click(Sender: TObject);
        begin
        imgedit1.DrawSelectionRect(selleft,seltop,selwidth,selheight);
        imgedit1.ClipboardCopy(selleft,seltop,selwidth,selheight);
        end;

        procedure Tscanf.ImgEdit1SelectionRectDrawn(Sender: TObject; Left,
        Top, Width, Height: Integer);
        begin
        if ((width=0) and (height=0))then
        begin
        n3.Enabled:=false;
        n6.Enabled:=false;
        n7.Enabled:=false;
        selleft:=left;
        seltop:=top;
        selwidth:=width;
        selheight:=height;
        end
        else begin
        n6.Enabled:=true;
        n7.Enabled:=true;
        selleft:=left;
        seltop:=top;
        selwidth:=width;
        selheight:=height;
        end;
        end;

        procedure Tscanf.N11Click(Sender: TObject);
        begin
        if not imgedit1.IsClipboardDataAvailable then
        if imgedit1.imagedisplayed then
        imgedit1.ClipboardCopy(0,0,imgedit1.Width,imgedit1.Height);
        end;
        end.

        溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!

        本類(lèi)教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 久久久久久国产精品免费免费| 最近中文字幕大全免费版在线| 成人免费大片免费观看网站| 亚洲AV无码久久寂寞少妇| 黄桃AV无码免费一区二区三区| 国产精品亚洲玖玖玖在线观看| 精品亚洲视频在线| 内射无码专区久久亚洲| 深夜A级毛片视频免费| 亚洲国产精品自在拍在线播放| 国产成人无码精品久久久久免费| JLZZJLZZ亚洲乱熟无码| 伊人免费在线观看高清版| 亚洲电影国产一区| 久久精品国产免费观看| 亚洲日产2021三区| 在线免费不卡视频| 黄床大片30分钟免费看| 亚洲精品无码高潮喷水在线| 精品国产麻豆免费人成网站| 亚洲韩国在线一卡二卡| 成年女人18级毛片毛片免费 | 亚洲人成无码网WWW| 亚洲一级片免费看| 亚洲电影一区二区三区| 日本精品人妻无码免费大全| 亚洲av纯肉无码精品动漫| 国产亚洲?V无码?V男人的天堂 | 二个人看的www免费视频| 亚洲va在线va天堂va888www| 日本免费人成在线网站| 青青青亚洲精品国产| 亚洲av中文无码乱人伦在线咪咕| 亚洲免费福利在线视频| 免费无码午夜福利片| 亚洲伦另类中文字幕| 女人被男人躁的女爽免费视频| v片免费在线观看| 亚洲国产高清在线精品一区| 免费在线一级毛片| 亚洲免费视频在线观看|