那里有Delphi下能驱动扫描仪
在Delphi中通过扫描仪获得所需的图象信息,有以下三种基本的方法:通过图象处理软件,比如说Photoshop等,通过它们的扫描图象的功能,加工成一定格式的图象后再在自己的系统中利用;通过扫描仪接口Twain。 DLL。该接口是在安装扫描仪时提供的,它实际上是一个Plugin插件,它通过一系列函数来控制扫描仪;通过构件技术来控制扫描仪。利用第一种方法能减少编程的复杂度,但是系统的集成度不高,用户使用上也不方便;第二种方法能在驱动程序级直接控制扫描仪,能在编程上提供最大的灵活性和可控性;第三种方法能充分利用Delphi的可视化构件技术,安全、灵活、自由地利用扫描仪。 其实第三种方法也是建...全部
在Delphi中通过扫描仪获得所需的图象信息,有以下三种基本的方法:通过图象处理软件,比如说Photoshop等,通过它们的扫描图象的功能,加工成一定格式的图象后再在自己的系统中利用;通过扫描仪接口Twain。
DLL。该接口是在安装扫描仪时提供的,它实际上是一个Plugin插件,它通过一系列函数来控制扫描仪;通过构件技术来控制扫描仪。利用第一种方法能减少编程的复杂度,但是系统的集成度不高,用户使用上也不方便;第二种方法能在驱动程序级直接控制扫描仪,能在编程上提供最大的灵活性和可控性;第三种方法能充分利用Delphi的可视化构件技术,安全、灵活、自由地利用扫描仪。
其实第三种方法也是建立在扫描仪接口Twain。DLL之上的。在此介绍的就是第三种方法。Windows9X在其附件中提供了"映象"可选件,该附件是采用OCX构件来控制扫描仪的,共有imgEdit、imgAnntool、imgScan、imgAdmin四个,有这四个构件基本上就能完全控制扫描仪。
在Delphi中的用法如下:1。在Windows9x中选择安装"映象"。(在控制面板中选择"添加/删除程序",再选择"安装Windows",点击"附件"复选框,然后从"详细资料"按钮中可以找到"映象")2。
启动Delphi,选择"Component"菜单项下的"ImportActiveXControl",这时可以看到列表中有"Wang图象编辑控制、Wang图象扫描控制、Wang图象管理控制、Wang图象缩略图控制",选中这四项,然后点击"Install"按钮,这时在构件面板上的ActiveX舌标下就可以看到这四个构件的图标。
ImgScan的主要属性:FileType:图象的文件类型(该构件支持三种:TIFF,BMP,AWD);ScanTo:返回或设置被扫描图象的目的;可取值含义0(缺省)显示被扫描的图象。1显示被扫描的图象并写入一个文件。
2把图象写入一个文件3以模板方式把图象写入文件并显示。4以模板方式把图象写入文件5传真被扫描的图象注意:如果取缺省值0,必须和WangImgEdit构件配合使用。DestIma 构件名;Zoom:图象的放缩比例ImgScan的主要方法:OpenScanner:打开扫描仪;CloseScanner:关闭扫描仪;StartScan:开始扫描;StopScan:停止扫描ImgEdit的属性主要是控制扫描图象的分辨率、图象的宽高、是否允许对图象进行局部选择等;其方法主要有拷贝、剪切图象到粘贴板,从粘贴板复制图象,旋转、放缩、镜象图象;打印、保存、刷新图象等。
可在Delphi中查看其自带的帮助系统。下面是使用这两个构件的一些例子:procedureTscanf。N1Click( );beginImgScan1。ShowSelectScanner;//选择系统中已安装的扫描仪end;procedureTscanf。
N2Click( );beginimgedit1。zoom:=100;//设置图象的放缩因子ifnotimgscan1。ScannerAvailablethen//如果选择的扫描仪不可用imgscan1。
OpenScanner;//打开扫描仪imgscan1。StartScan;//开始扫描图象imgscan1。CloseScanner;//关闭扫描仪end;procedureTscanf。N8Click( );beginif(imgedit1。
IsClipboardDataAvailableandimgedit1。ImageDisplayed)thenimgedit1。ClipboardPaste(selleft,seltop);//从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标end;procedureTscanf。
N1801Click( );beginifimgedit1。ImageDisplayedthenimgedit1。Flip;//镜象图象end;procedureTscanf。N901Click( );beginifimgedit1。
ImageDisplayedthenimgedit1。RotateRight//向右旋转图象end;procedureTscanf。N6Click( );beginimgedit1。DrawSelectionRect(selleft,seltop,selwidth,selheight);//进行图象局部选择imgedit1。
ClipboardCut(selleft,seltop,selwidth,selheight);//剪切所选区域end;注意:在DELPHI中使用Imgedit构件的拷贝和剪切功能时,会出现以下问题:1、如果把整幅图象都选中,没有任何问题;2、如果选择了局部区域,则拷贝和剪切的区域会发生漂移;3、如果DELPHI做的是MSSQL后端数据库的客户端界面,那么在把图象内容写入数据库的图象字段中时,BDE(数据库引擎)会报错。
至于第二个问题,可这样解决:在Imgedit的onSelectionRectDrawn事件中写一段代码,把选择区域的边界值保存到四个全局变量中,在拷贝和剪切之前用先前保存的变量再进行一次选择即可。
unitscanu;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,Menus,ScanLib_TLB,ExtCtrls,AxCtrls,OleCtrls,ImgeditLib_TLB;typeTscanf=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;procedureN4Click( );procedureN1Click( );procedureN2Click( );procedureC1Click( );procedureN8Click( );procedureN1801Click( );procedureN901Click( );procedureN902Click( );procedureN6Click( );procedureN7Click( );procedureImgEdit1SelectionRectDrawn( ,Top,Width, );procedureN11Click( );private{Privatedeclarations}public{Publicdeclarations}selleft,seltop,selwidth,end; {$R*。
DFM}procedureTscanf。N4Click( );beginimgedit1。ClearDisplay;close;end;procedureTscanf。N1Click( );beginImgScan1。
ShowSelectScanner;end;procedureTscanf。N2Click( );beginimgedit1。zoom:=100;ifnotimgscan1。ScannerAvailablethenimgscan1。
OpenScanner;imgscan1。StartScan;imgscan1。CloseScanner;end;procedureTscanf。C1Click( );beginifimgedit1。
ImageDisplayedthenbeginimgedit1。ClearDisplay;imgedit1。zoom:=100;end;end;procedureTscanf。N8Click( );beginif(imgedit1。
IsClipboardDataAvailableandimgedit1。ImageDisplayed)thenimgedit1。ClipboardPaste(selleft,seltop);end;procedureTscanf。
N1801Click( );beginifimgedit1。ImageDisplayedthenimgedit1。Flip;end;procedureTscanf。N901Click( );beginifimgedit1。
ImageDisplayedthenimgedit1。RotateRightend;procedureTscanf。N902Click( );beginifimgedit1。ImageDisplayedthenimgedit1。
RotateLeft;end;procedureTscanf。N6Click( );beginimgedit1。DrawSelectionRect(selleft,seltop,selwidth,selheight);Imgedit1。
ClipboardCut(selleft,seltop,selwidth,selheight);end;procedureTscanf。N7Click( );beginimgedit1。DrawSelectionRect(selleft,seltop,selwidth,selheight);imgedit1。
ClipboardCopy(selleft,seltop,selwidth,selheight);end;procedureTscanf。ImgEdit1SelectionRectDrawn( ,Top,Width, );beginif((width=0)and(height=0))thenbeginn3。
Enabled:=false;n6。Enabled:=false;n7。Enabled:=false;selleft:=left;seltop:=top;selwidth:=width;selheight:=height;endelsebeginn6。
Enabled:=true;n7。Enabled:=true;selleft:=left;seltop:=top;selwidth:=width;selheight:=height;end;end;procedureTscanf。
N11Click( );beginifnotimgedit1。IsClipboardDataAvailablethenifimgedit1。imagedisplayedthenimgedit1。
ClipboardCopy(0,0,imgedit1。Width,imgedit1。Height);end;end。收起