发信人: li-dong() 
整理人: teleme(2000-12-06 19:06:52), 站内信件
 | 
 
 
【 在 sztxh (不住) 的大作中提到: 】
 : 那里有这方面的资料和源代码?
 : 回信请打钩,谢谢!
 : 请寄到下面的地址:
 : [email protected]
 :    .......
 在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:图象的文件类型(该构件支持三种:TIF F,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事件中 写一段代码,把选择区域的边界值保存到四个全局变量中,在拷贝和剪切之前用 先前保存的变量再进行一次选择即可(当然,这一切都在后台进行的,见前面的 例子)。
 
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.74.186.202]
  | 
 
 
 |