1.我想在程序中直接控制 扫描仪,这样不必要先把图片先扫下来,再存入数据库中了。
2.哪位前辈能给个例子?

解决方案 »

  1.   

    联系
    [email protected]
      

  2.   

    delphi里面其实是有一组控件的,在Import ActiveX中有kodak一组控件可以直接控制扫描仪。
    在win98中有一个imgocxd.hlp就是这组控件的帮助。不过我在win2000中没有找到。
      

  3.   

    在利用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扫描仪;
      

  4.   

    呵呵,只是现在不用在Windows9x中选择安装“映象”了
      

  5.   

    本人程序应用环境有Win9x/winME/Win2000Server(or professornal) 如何有通用的办法?
      

  6.   

    你用kodak控件开发应该在你讲的环境里面都可以用的!
      

  7.   

    http://cnprogram.myrice.com/article/delphi/delphi127.html的文章或许堆泥有所帮助
      

  8.   

    在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);beginImgScan1.ShowSelectScanner;//选择系统中已安装的扫描仪end;procedure Tscanf.N2Click(Sender: TObject);beginimgedit1.zoom:=100; //设置图象的放缩因子if not imgscan1.ScannerAvailable then//如果选择的扫描仪不可用imgscan1.OpenScanner;//打开扫描仪imgscan1.StartScan; //开始扫描图象imgscan1.CloseScanner; //关闭扫描仪end; procedure Tscanf.N8Click(Sender: TObject);beginif (imgedit1.IsClipboardDataAvailableand imgedit1.ImageDisplayed ) thenimgedit1.ClipboardPaste(selleft,seltop);//从剪贴板粘贴图象,其参数为Imgedit的显示区域的起始坐标end;procedure Tscanf.N1801Click(Sender: TObject);beginif imgedit1.ImageDisplayed thenimgedit1.Flip; //镜象图象end;procedure Tscanf.N901Click(Sender: TObject);beginif imgedit1.ImageDisplayed thenimgedit1.RotateRight //向右旋转图象end;procedure Tscanf.N6Click(Sender: TObject);beginimgedit1.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事件中写一段代码,把选择区域的边界值保存到四个全局变量中,在拷贝和剪切之前用先前保存的变量再进行一次选择即可(当然,这一切都在后台进行的,见前面的例子)。