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

在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.

【PPT集萃】十位一线专家分享Spark现状与未来(二) 2014年,怎么做产品才能获得成功? 年末新游盘点:2014年移动游戏四大趋势 IDC:全球有1850万程序猿 4成爱好者在写代码 PHP开发框架流行度排名:Laravel居首 2013年度最强AngularJS资源合集 研发周报:回顾2013、技术栈的选择、开源成趋势 TIOBE 2014年1月编程语言排行榜:Transact-SQL力挫Objective-C 夺得桂冠 IBM:这五个智能技术的发展,将会改变我们生活 一周消息树: 微软的2013,Surface的2014 Amazon CTO Werner Vogels:云和SaaS正在快速风靡全球 “人类先知”Isaac Asimov 50年前的科技预测大多应验了 2014年10大Web设计趋势 Google野心:App Indexing改写应用搜索格局 Cocos2d-x,老牌引擎的新进化 Kingdom Rush创始人专访:游戏与电影元素混搭 超实用的JavaScript技巧及最佳实践(下) 盖茨和鲍尔默或成挑选微软新CEO的最大阻碍 移动开发进阶:触发式邮件深入分析 King.com传奇再续!Farm Heroes Saga强势登陆iOS、Android 2013综述稿:Clojure这一年及大事件 亚马逊AWS vs.谷歌GCE,彪的是价格? 2014,混合云被广泛采用的一年 传微软拉拢厂商推双启动系统手机 用户可选Windows Phone或Android 为什么游戏领域总是“抄抄抄”! 物竞天择、百家争鸣——评OpenStack生态圈 CES 2014:Intel针对可穿戴技术发布多款产品 直击CES:Pebble推金属版智能手表Pebble Steel 为4K智能电视而生:高通推出骁龙802处理器 英特尔首席执行官阐述可穿戴设备新技术及Edison计算平台 设计师如何写出更棒的项目建议 在NT和win2000下,如何直接操作计算机的并口? 哪位大虾在中文windows xp下安装过VS7.0,拜托告诉下怎么安装,我安装了3回了,均告失败 请问,用在java_applet中怎么实现一幅图片的旋转?怎么控制转动的速度? 天啊!救命啊!! 如何在客户端IE中执行服务器上的应用程序呢,十万火急。请各位大虾不吝赐教 :如何将包含各种数据类型的文件读入,而且要考虑文件的定位(比如从文件最后一个数据往前读) 如何响应wm_nchittest 消息? SHELL是否可以调用网络资源 在PHP中使用word COM对象的问题。 请教一个问题:如何反回一个MonthCalendar1控件上的的周期(控件上有显示,但不知道如何在程序中得到)? 老板叫我做一个界面,跟VC的界面视图一样, 能不能作一个中文编译器??? 我不要活了。。。 菜鸟:一个小问题 基于对话框的程序中,使用了Tree Control和Edit box,如何在Edit box中显示TreeControl中选中的文本文件的内容。希望提供类似的例子。 ★★★★★★★紧急求救★★★★★★★★ 寻找丢失的分区表!!! windows2000进入“等待”后,唤不醒是怎么回事,请指点! jsp数据库中的Date类型? 在vb中如何进行时间比较?例如1 / 7 / 17 10:00:00 - 1 / 7 / 17 00:00:00 得到一个值?? 请问如何获得其他机器的网卡MAC地址?非常感谢!!! 别了,最爱的BCB! 如何判断一个指向窗口的指针可用? 请教高手:怎么样破windows2000的登陆密码?其密文存放在什么地方? 急:哪里有电子文档 找到找到 网络编程、大虾有请!如何获得当前每秒的字节数? 各位高手,有人喜欢用mysql吗?谈谈这个东东吧 大富翁怎么连不上了? 各位武汉的大虾,请教武汉程序员、高级程序员、系统管理员(正规的大公司)、以及用JAVA做开发的工资一般为多少。希望大家给予帮助!!前途问题!! 网络编程大虾有请!如何获得当前每秒的字节数? 怎样在treeview中设置背景图片 to 版主:精华区太乱了,请给予分类。谢了 听说VB可以写PAD的程序,TRUE? JLabel中文本换行问题 马上要开始学BCB,请问BCB有那种类似于VC的创建类的向导吗,看到BCB的界面我就想到DELPHI中创建类的难度 我的游戏引擎BATTLEFIELD作好了,欢迎下载(这次是真的) 一个pop_up menu的问题 那位高手知道在SDK中使用ADO的方法 为普天之下正直而上进的程序员找一个温馨的家 为什么不能把JMF包打进去??? 内存泄露是指例如“为对象分配一个内存区后,未删除内存区,但删除了对象”是吗? 装pws时遇到的麻烦! to freezwy(网络自由人) 有没有限制上传图片大小的asp代码??(不是组件) 还是没有解决!!! 有关VC中数据库绑定的问题! 扔个骨头……下个“圈套”,呵呵? ^_^ 紧急情况!如何改变DataGrid控件中个别行的颜色?? 如果实现断开共享目录的连接 acces 表 SQL语句中如何转换字符型字段为整型? First-chance exception 学校食堂运进5吨煤,计划烧80天,由于改进炉灶,每天节约5千克煤,这些煤实际能少几天? 610乘800等于多少? 无限循环小数是有理数,都是可以化成分数形式, 食堂原计划烧煤4800千克,实际比计划节约了百分之8.5,实际烧煤多少千克? 学校食堂运来1500千克煤,计划烧50天.由于改炉灶,每天节省5千克煤,这批煤可以烧多少天? 60乘800等于多少?60乘800等于48000 食堂原计划烧煤4800kg实际烧煤是原计划的91.5%实际比原计划少烧了多少千克! 学校食堂运来1500千克煤,计划烧50天.由于改炉灶,每天节省5千克煤,实际每天烧多少千克煤?要列出算式来 3吨50千克等于几分之几吨要化成最简分数 某食堂六月份用煤六又四分之一吨,比五月份节约了六分之一,节约的多少t 学校食堂运来1500千克煤,计划烧50天.由于改炉灶,每天节省5千克煤,实际可以烧多少天? ( )/( )=0.28=几分之几=( )% 食堂六月份烧煤8吨,比五月份节约15%,五月份烧煤多少吨? 食堂运来10吨煤,计划烧40天.由于改进炉灶,每天节省5千克.这批煤现在可以烧多少天?列式为() 4是28的几分之几的答案是多少 食堂五月份烧煤880千克,六月份比五月份节约八分之一,这个食堂六月份烧煤多少千克要算式,不要解方程 食堂改进炉灶后每天烧煤69千克,比原来节省8%.原来每天烧煤多少千克? ( )÷5=几分之几=0.4=10﹕( )=( )% 食堂五月份用煤3吨,六月份比五月份节约了1/4,节约了多少吨?先画线段图,再列式计算 食堂运来2000千克煤,计划40天烧完,由于改进炉灶,每天节省5千克,这批煤大约可以烧多少天?两种方法 6分之5 既表示1的几分之几,还表示5的几分之几 食堂四月份比五月份多烧煤100吨,五月份比四月份节约10分之1,食堂四月份多少吨(用方程) 食堂改进炉灶后,比原计划节约5分之1,正好节约6分之7吨,实际用煤多少吨 3/1是5/6的几分之几?3/1表示3分之13/1是5/6的几分之几?24/5是36/25的几分之几?大大大大大虾们 可以OK么?3分之1是6分之5的几分之几,24分之5是36分之25的几分之几 算式这么列? 食堂4月份比5月份多烧煤100吨,5月份比4月份节约1/10,食堂5月份烧煤多少吨? 某食堂本月改进炉灶后,比原计划节约用煤五分之一,正好节约2吨.本月实际用煤多少吨? 0.6里面有6个几分之一表示几分之几 食堂运来一堆煤,烧掉了35%,正好烧掉了140吨,食堂运来了()吨煤.食堂运来一堆煤,烧掉了35%,还剩140吨,食堂运来了()吨煤.食堂运来5/6吨煤,烧掉了5/9,烧掉了()吨食堂运来5/6吨煤,烧掉了5/9 食堂运来3吨煤.计划可以烧20天.由于改进炉灶,每天可比计划节约30千克,这批煤现在可以烧多少天?第二个问题:甲乙两个仓库存有大米,乙仓库比甲仓库少2800千克,甲仓库大米的重量是乙仓库的 ∠A=90度,BD是△ABC的角平分线,DE是BC的垂直平分线,求∠ABC和∠CDE的度数. 食堂的煤已经烧掉了35%,正好烧了140吨,食堂原来有多少吨煤? 某食堂改造炉灶后,每天节约用煤60千克,这样原来计划用32天的煤,现在可以用48天.这堆煤共有多少千克? 已知关于x的不等式组{x-a≥0,5-3x>-1,它的整数解共有5个,求a的取值范围. 食堂运来一堆煤,已经烧了3/5,还剩6吨.这堆煤烧了多少吨? 水泥厂食堂运回3吨煤计划可以烧20天,改进炉灶后,这批煤烧了25天,实际平均每天比原计划节约用煤多少千克 已知5x-3y-2=0,则1010x ÷106y =(        ) 1.食堂运来 910吨煤,已经烧了这堆煤的35%,还剩下多少吨煤.2.汽车厂九月份按5%的税率激纳营业税1.35万元.这个厂九月份的营业额是()万元.3.有一堆煤,第一周烧了40%,第二周烧了37.5%,还剩90千克 食堂改进炉灶后,每月比计划少用煤五分之一,正好节约十分之九吨,现在每月实际用煤多少吨 某商场以50元/件的价格进来一批羊毛衫.前期市场点调查表明:如果以60元/件的价格卖出,则每周可卖出100件,在此基础上销售价格每件增加5元,则周销售量减少4件.假设该商店把销售价格定为x 应用题:食堂运来一些煤,计划每天用50千克,6.5天烧完,实际10天才烧完,实际每天可节约多少煤? 一项工程,计划10天完成,实际8天完成任务,工作时间缩短了20%,工作效率提高了25%!为什么?工作时间缩短了:(10-8)÷10=20%工作效率:原来10天完成,每天10分之1,实际8天完成,每天8分之1.提高了: 小明向一个底面为30cm*30cm的长方体玻璃容器中装满水,并将一部分水倒入一个正方体铁桶中,当这个正方体铁桶装满水时,长方体容器中的睡眠下降了20cm,则这个正方体铁桶的棱长有没有超过25cm? 学校食堂运来一堆煤,煤多少千克计划每天烧50千克,8.5天烧完,实际10天才烧完,实际每天烧煤多少千克 一件工作,原计划10天完成,实际8天完成,工作时间缩短了()%?工作效率提高了()%A12.5 B20 C25 D10(是选择题) 快急!19/78是几分之几? 食堂买来一批煤,计划每天烧250千克,可以烧20天,实际每天节约用煤20%,这样可以 一项工作,原计划十天完成,实际八天完成,工作时间缩短了百分之几,工作效率提供了百分之几工作效率是10/8-1=25%吗这道算式的思路是什么 一杯牛奶,第一次喝了全杯的2分之1,第二次喝了全杯的4分之1,还剩全杯的几分之几?快 美味食堂每天烧掉85kg,比原来节约15kg,节约了百分之几 一件工作,原计划10天完成,实际8天完成,工作时间缩短了百分之多少,工作效率提高了百分之多少? 1.22222 ×9-1.33332 ×4=(        ) 某校食堂有煤mkg,原计划每天用煤akg,实际每天节约用煤15kg,节约后可以多用多少天?(式子) 一箱工程原计划25天完成,实际提前了5天完成,工作时间缩短了几分之几? 100分之28化成最简分数是几分之几? 某食堂有煤m吨,原计划每天烧煤a吨,现在每天节约烧煤b吨,则可比原计划多烧____天 一件工作,原计划10天完成,实际8天完成,工作时间缩短了( )%,工作效率提高了( )%. 100分之304化成最简分数 学校食堂运来1吨煤计划烧40天由于改进炉灶每天可节省5千克这堆煤实际可以烧多少天?怎样计算 完成一项工程的时间由5小时缩短到4小时,工作效率提高了几分之几?要有思考过程 成绩优秀率=几分之几*100%人员的出勤率=几分之几*100%急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn