说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中控制扫描仪

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中控制扫描仪

通过扫描仪接口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扫描仪;

---- 附源代码。

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.

Google Play Game不够开放,被OpenKit炮轰 Google Play Game Service详解 不仅提供API更提供后端支持 IBM Power走向Linux,是必然的! 美国国家安全局解密特工培训手册:如何利用谷歌等大众搜索工具搜集保密数据 微软IE10如何保护上网安全(大图) 谷歌无畏苹果的理由:强力的算法和基础设施架构 开发者热议异构统一内存访问技术(hUMA) 千万级并发实现的秘密:内核不是解决方案,而是问题所在! Apache RewriteRule重写规则语法入门 IDC:2013 Q1 Android和iOS出货量占92% WP首超黑莓 传雅虎欲10亿美元收购轻博客网站Tumblr A Beautiful Mess:如何赚男人女人的钱 CSS、JavaScript开发者必备的10款最佳工具 IBM推出API管理平台 抢占API经济市场份额 2013中国云计算榜单之一:15云平台,谁主沉浮? 移动周报:百万壁纸、85后程序媛,我为梦想代言! 电信天翼开放平台:为App开发者免费提供云存储和云主机服务 Google新的Web UI库:Ploymer 研发周报:让开发者高效编程的10个新框架 拯救行将就木的PHP:谷歌为GAE添加PHP支持 PPT集萃(一):10位业内高管分享云计算技术理念与行业趋势 得益于苹果谷歌,未来可穿戴技术市场规模可达500亿美元 雅虎11亿美元押注Tumblr三大因素:用户、社交、内容 Perceptual:英特尔感知计算挑战赛 正式启动 吴义坚:创业去!我用深度神经网络,处理语音识别 浅谈用户体验的“反面模式 可穿戴设备又一站:增强现实眼镜CastAR 数字医疗投资将破纪录 投资人看好这些细分领域 Mayer又下一城:雅虎收购Tumblr推进移动化? 前端开发利器:代码预处理工具Prepros 一个轻量级的JavaScript库:Reactor.js 我的项目改变目录后打不开,怎么办? 多CPU机器,同时可有几个线程处于运行状态? 高分求高效高斯模糊算法。。 如何判断软件是否过期 是不是运行ASP.Net应用的服务器必须安装.Net FrameWork呢?还是只要有Win2000 Server和IIS就行。 谈情说爱 清除内存中用call调用的脚本文件? 一个很老的问题,如何避免CListCtrl闪烁。 请大家给看看程序:avi视频读取和重建 研究数字图像处理应该那些知识? 图片上传并显示实例(VB+SqlServer2000) SQL语言中 怎样将CHAR型转换成INT型? 級連更新... 怎么实现回车自动跳到下一个位置 如何在光标处插入字符? CSSCLASS高手关注,我想把ListBox、DropDownList样式改为平面,而且颜色边框为1颜色不为灰色,用CssClass具体怎么写呢?越详细越好?多谢 求一招:::怎么对付那些那了代码就不给钱的家伙???? =========发誓:远离csdn!================ phpmyadmin为何安装不成功? 谁有crystal reports的电子书。 这个radio的返回值是什么? 离开csdn,公布密码!!!!!!!!! 新手!求界面问题的答案! javascript面相对象的编程 IMail邮件系统的问题 七月七,我不在她身旁. 可是很想她.我爱她. 高分!求一简单问题。 今天七月七了,代表所有单身人员向全体女单身同胞问好,同时也祝成双成对的人永远快乐!! 请问php中二维数组怎么定义和初始化? 难题---SQL Panel2.Width/2;应该怎样改 求: Rational XDE 2003 (带破解的),分不够可以再加,要多少给多少,很急! 这个存储过程怎样调用? 在有限区域中打印文本,文本长度若超出,则压缩间距,否则正常显示 急,高手请进! 如何重新加载select? 怎样做一个网页编辑器(windows form)大家给个思路 强烈建议 删除 {{轰动上海大学的偷拍事件录像下载地址 (yy795188 ) }}的贴子,否则版主失职 用Authorware能够作出象隐藏在框架里的菜单吗? 我的程序需要定期执行一次,怎么写呢? 请各位大侠帮忙分析分析,我大概还有300分的可用分,解决的话,全送你了(300分) 日历 这是Mysql的BUG吗--彬、斌--如何分别查询 如何利用XML中的xsl进行信息的交换 为什么我新建项目时不行? 求教:有没有象outlook一样的文件管理软件?? 怎樣利用datalink和可更新快照進行雙机數据同步一制備份?急救!急救!在線等待!! 我学flash怎样才能入门了~~!我现在不知道怎么下手~~! 请问这个ASP文件怎么转成JS文件以便调用?? 急:那位仁兄提供存取BLOB字段的代码,数据库为ORACLE. 求书?(急) 12根长方体的立柱,长2.6m,宽0.9m,给柱子涂油漆,每平方分米用油漆0.5kg.需要多少油漆? 公园的广场上有4根4米高的长方体立柱,每根立柱的底面是边长为5分米的正方形.1.这些立柱占地多少平方米?2.这些立柱占了多大的空间?如果在这些立柱的顶面盒四周贴上大理石,每根至少需要 这个斯大林的笑话说明了什么前苏联时期,人们生活水准很落后.有一天,一个好几天没有吃饭的人在河边捉到了一跳鱼,兴奋地跑回家去,招呼自己的妻子说:快拿一个锅来!我们炸着吃!妻子说: 世界上真的有巫术吗,如果有,巫术的实质到底是什么 相儒以沫,什么意思 等底等高的圆柱和圆锥的体积之和是48dm³圆锥比圆柱的体积小() 一个圆柱和一个圆锥等底等高,它们的体积相差14dm³,这个圆柱的体积是多少?这个圆锥的体积是多少? <施公案>,<济公传>,<彭公案>,<三侠武义>,<古文观止>都是谁写的? 彭公案是谁写的要朝代和国籍 中国神秘古老巫术请大家介绍一下中国各个地域各个民族的神秘古老的巫术(越全面越好),谢谢. 中国的巫术具体是些什么? 最高层着手“顶层设计” 中国周边外交“舞动浙江”华丽登场 我省万人排舞大杭州今晨创“入秋”后最低气温 下周全中共代表团访问澳大利亚解放军少将:中国军事力量发展绝不针对海军“机动-5号”演习遭外国军舰飞机德媒:美国监听德国总理手机 奥巴马知踏访桂河大桥:历史记住了这座桥伊拉克首都发生多起汽车炸弹爆炸 至少伊拉克首都发生多起汽车炸弹爆炸 至少第3届“中俄舞台艺术对话”在京举办香港集团联手葛洲坝 推进尼加拉瓜运河成都市人社局确定企业职工工资增长基准成都今年上半年社会消费品零售总额突破王毅:推动中俄全面战略协作伙伴关系在王毅:推动中俄全面战略协作伙伴关系在中央巡视组今年第二轮巡视已全部进驻王毅:推动中俄全面战略协作伙伴关系在乌克兰议会拒绝接受总理辞职上海防御台风“娜基莉” 预计局部会有渝湘高速武隆收费站通道加宽施工 上下王毅晤俄外长 双方将就乌克兰等问题保
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘