📄 h20000424-22.htm
字号:
<html><head><script language="JavaScript"> function reset(){ for ( var i=0; i < document.Form1.elements.length; i++ ) { document.Form1.elements[i].options[0].selected=true }}function going(url){ parent.location=url; reset();}</script><style><!--A:link {text-decoration: none; color: #000000; font-family: 宋体}A:visited {text-decoration: none; color: #000000; font-family: 宋体}A:active {text-decoration: none; font-family: 宋体}A:hover {text-decoration: underline:#ffffff; color: #ff0000}body,table {font-size: 9pt; font-family: 宋体}.H1 {font-size: 9pt ; line-height:9pt; align=center}.ourfont {font-size: 9pt ; line-height:9pt; }.ourfont1 {font-size: 9pt ; line-height:9pt; }--></style><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>在Delphi中控制扫描仪?</title></head><body topmargin="0" leftmargin="0"><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td><p class="content4"><span class="font"><img border="0" height="3" src="../../soft/pix.gif" width="700"></span></td> </tr></tbody></table></center></div><div align="center"><center><table border="0" cellPadding="0" cellSpacing="0" width="700"><tbody> <tr> <td bgColor="#3399ff" width="658"><p class="ourfont"><span class="font"> </span><a style="text-decoration: none; color: rgb(255,255,255)" href="../os/H00705-2.htm">操作系统</a><font color="#FFFFFF"><span class="font"><span> |</span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../image/H00705-14.htm">图像处理</a><font color="#FFFFFF"><span>|<span class="font"> </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../autoCAD/H00705-19.htm">辅助设计</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../data/H00705-18.htm">数 据 库</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="H00706-1.htm">高级编程</a><span class="font"><font color="#FFFFFF"><span> | </span></font></span><a style="color: rgb(255,255,255); text-decoration: none" href="../netuse/H00705-20.htm">网络应用</a><font color="#FFFFFF"><span><span class="font"> | </span></span></font><a style="color: rgb(255,255,255); text-decoration: none" href="../webpage/H00705-21.htm">网页制作</a><font color="#FFFFFF"><span><span class="font"> |</span></span></font> <a style="color: rgb(255,255,255); text-decoration: none" href="../technic/H00706-3.htm">技术交流 </a><a style="color: rgb(255,255,255); text-decoration: none" href="http://202.100.13.77/clslyb/default.asp?clsid=jiaoc"><font color="#FFFFFF"><strong>过客留言</strong></font></a></td> <td bgColor="#3399ff" width="32"><p align="center" class="ourfont"><a href="mailto:net@163.sn.cn"><img src="../../soft/email.gif" alt="email.gif (493 字节)" border="0" WIDTH="20" HEIGHT="19"></a></td> </tr></tbody></table></center></div><div align="center"><center><table border="1" cellSpacing="1" width="700" bordercolor="#3399FF"><tbody> <tr> <td align="left" bgColor="#FFFFFF" vAlign="top" width="700" bordercolor="#0000FF" bordercolorlight="#0000FF" bordercolordark="#0000FF"><p class="ourfont"> </p> <p align="center">在Delphi中控制扫描仪 <br> <br> 天津师范大学 曹进军 </p> <p>---- 在利用Delphi开发信息管理系统时,常常要处理图象,这也是信息管理系统发展的必然趋势。怎样在Delphi中通过扫描仪获得所需的图象信息呢?不外乎有三种基本的方法: <br> 通过图象处理软件,比如说Photoshop等,通过它们的扫描图象的功能,加工成一定格式的图象后再在自己的系统中利用; <br> <br> 通过扫描仪接口Twain.DLL 。该接口是在安装扫描仪时提供的,它实际上是一个Plugin插件,它通过一系列函数来控制扫描仪; <br> <br> 通过构件技术来控制扫描仪。 <br> ---- 利用第一种方法能减少编程的复杂度,但是系统的集成度不高,用户使用上也不方便;第二种方法能在驱动程序级直接控制扫描仪,能<br> 在编程上提供最大的灵活性和可控性;第三种方法能充分利用Delphi的可视化构件技术,安全、灵活、自由地利用扫描仪。其实第三种方法也<br> 是建立在扫描仪接口Twain.DLL之上的。本文论述的方法就采用第三种。<br> <br> ---- Windows9X在其附件中提供了“映象”可选件,该附件是采用OCX构件来控制扫描仪的,共有imgEdit、imgAnntool、imgScan、imgAdmin 四个,有这四个构件基本上就能完全控制扫描仪。在Delphi中的用法如下: 在Windows9x中选择安装“映象”。(在控制面板中选择“添加/删除程序”,再选择“安装Windows”,点击“附件”复选框,然后从“详细资料”按钮中可以找到“映象”) <br> <br> 启动Delphi,选择“Component”菜单项下的“Import ActiveX Control”,<br> 这时可以看到列表中有“Wang 图象编辑控制、Wang 图象扫描控制、Wang<br> 图象管理控制、Wang 图象缩略图控制”,选中这四项,然后点击“Install”<br> 按钮,这时在构件面板上的ActiveX舌标下就可以看到这四个构件的图标。 <br> ---- ImgScan 的主要属性:FileType:图象的文件类型(该构件支持三<br> 种:TIFF,BMP,AWD); <br> <br> ScanTo:返回或设置被扫描图象的目的;<br> 可取值 含义 <br> 0 (缺省) 显示被扫描的图象.<br> 1 显示被扫描的图象并写入一个文件.<br> 2 把图象写入一个文件<br> 3 以模板方式把图象写入文件并显示.<br> 4 . 以模板方式把图象写入文件<br> 5 传真被扫描的图象<br> 注意:如果取缺省值0,<br> 必须和 Wang ImgEdit 构件配合使用。<br> DestImageControl:Wang ImgEdit构件名;<br> Zoom:图象的放缩比例<br> <br> ImgScan 的主要方法:OpenScanner :打开扫描仪;<br> CloseScanner :关闭扫描仪; <br> StartScan : 开始扫描;<br> StopScan : 停止扫描<br> <br> <br> ---- ImgEdit 的属性主要是控制扫描图象的分辨率、图象的宽高、是否<br> 允许对图象进行局部选 择等;其方法主要有拷贝、剪切图象到粘贴板,<br> 从粘贴板复制图象,旋转、放缩、 镜象图象;打印、保存、刷新图象等。 <br> ---- 关于上述四个OCX构件的详细使用说明可在Delphi中查看其自带的<br> 帮助系统。 <br> ---- 下面是使用这两个构件的一些例子: <br> <br> procedure Tscanf.N1Click(Sender: TObject);<br> begin<br> ImgScan1.ShowSelectScanner; <br> //选择系统中已安装的扫描仪<br> end;<br> <br> procedure Tscanf.N2Click(Sender: TObject);<br> begin<br> imgedit1.zoom:=100; //设置图象的放缩因子<br> if not imgscan1.ScannerAvailable then <br> //如果选择的扫描仪不可用<br> imgscan1.OpenScanner;//打开扫描仪<br> imgscan1.StartScan; //开始扫描图象<br> imgscan1.CloseScanner; //关闭扫描仪<br> end;<br> <br> <br> procedure Tscanf.N8Click(Sender: TObject);<br> begin<br> if (imgedit1.IsClipboardDataAvailable <br> and imgedit1.ImageDisplayed ) then<br> imgedit1.ClipboardPaste(selleft,seltop);<br> //从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标<br> end;<br> <br> procedure Tscanf.N1801Click(Sender: TObject);<br> begin<br> if imgedit1.ImageDisplayed then<br> imgedit1.Flip; //镜象图象<br> end;<br> <br> procedure Tscanf.N901Click(Sender: TObject);<br> begin<br> if imgedit1.ImageDisplayed then<br> imgedit1.RotateRight //向右旋转图象<br> end;<br> procedure Tscanf.N6Click(Sender: TObject);<br> begin<br> imgedit1.DrawSelectionRect(selleft,<br> seltop,selwidth,selheight);//进行图象局部选择<br> imgedit1.ClipboardCut(selleft,seltop,<br> selwidth,selheight);//剪切所选区域<br> end;<br> <br> <br> ---- 注意:在DELPHI中使用Imgedit构件的拷贝和剪切功能时,会出现<br> 以下问题: <br> ---- 1、 如果把整幅图象都选中,没有任何问题; <br> ---- 2、 如果选择了局部区域,则拷贝和剪切的区域会发生漂移; <br> ---- 3、 如果DELPHI做的是MS SQL后端数据库的客户端界面,那么在把<br> 图象内容写入数据库的图象字段中时,BDE(数据库引擎)会报错。这是<br> DELPHI3。0和4。0的BUG,4。0的升级包可以解决这个问题。 <br> ---- 至于第二个问题,可这样解决:在Imgedit的onSelectionRectDrawn<br> 事件中写一段代码,把选择区域的边界值保存到四个全局变量中,在拷贝<br> 和剪切之前用先前保存的变量再进行一次选择即可(当然,这一切都在后<br> 台进行的,见前面的例子)。 <br> ---- 开发环境:DELPHI4。0,HP ScanJet 4P扫描仪; <br> <br> ---- 附源代码。<br> unit scanu;<br> <br> interface<br> <br> uses<br> Windows, Messages, SysUtils, Classes, Graphics, Controls, <br> Forms, Dialogs, Menus, ScanLib_TLB, ExtCtrls, AxCtrls, <br> OleCtrls, ImgeditLib_TLB;<br> <br> type<br> Tscanf = class(TForm)<br> MainMenu1: TMainMenu;<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -