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

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

开源世界应该致谢的五家公司 Square、LinkedIn、Google... 高薪利器:四大热门云计算认证推荐 陌生的编程任务,该拿你怎么办? 辟谣:网传Flappy Bird开发者已经自杀 Apple可穿戴倾向健康类,又一个即将被颠覆的行业 传诺基亚月底推Android手机 去除一切谷歌服务 响应式网站与原生移动应用,哪个更适合你的企业? HBuilder:最快的Web开发IDE 成功开发系统集成项目的六大建议 OS X平台上出现窃取比特币的木马 《近匠》第11期:Arrownock——移动社交构建师 面向企业:Google发布iOS版Google Admin应用 Github推出Education平台 师生免费享有微账号 平板的市场依然巨大:应用更丰富,Phablet设备存局限 免费的PCB数据3D转换工具 OBD++ XVL Converter Hadoop Namenode以regular方式启动代码流程分析 走进支撑过8亿用户的Yahoo!数据中心 Napier,一个引领Rackspace14年老兵功成身退 Twitter最新测试版被指仿Facebook的界面设计 成功求职者的自述:如何向应聘企业展示自身价值? 仅用移动开发服务:一分钱不花,开发native应用 苹果员工爆辞职内幕 Windows Phone 8.1被曝光信息汇总 Phaser:开源的HTML5 2D游戏开发框架 HTML5调查:做的好,收入不比iOS差 汽车巨人福特让“数据”说话 基调数据解读2014网购行业的3大变化 测测:用百度Clouda占卜移动互联网 微软的无奈:或允许Android应用运行于Windows平台 如何选择适合自己的编程语言 Google Now新增语音命令:生活简单一点,让爱更近一点 怎么样把两个ArrayList合并成一个??我在文档里找了半天也没找到!急~~!!!!!!! 请问,NT4.0下怎样配置网关和路由? 请问如何知道一个弹出菜单是否以经关闭 升级后问题,奇怪,请指教? 什么是存储过程? 大侠们帮忙看看,简单问题 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169. 请问怎样才能在Access中选取指定行数的记录如第5-10条. 关于XML命名空间的疑问?请教各位高手帮帮忙!谢谢! 请问哪里有《情深深雨蒙蒙》下载??? ******斑竹快出来啊 看看我这个贴子啊!!!!!!!!!!!!!! 如何读取寄存器中的数据? 请问在数据库中如何操作日期型字段: Help,如何把本机加入主域服务器? 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169 怎么用vbscript定义一个函数阿。我想作一个下拉框的onchange事件,请指教 如何确定adoquery的数据是否被修改了? 有关程序调试的问题 全都转行卖大白菜。 对于各个.h和.cpp文件分工如何,我的各种函数各个变量到底该放在哪个文件中的哪个class中? 如何停止asp调用的dll文件,我调用my_dll.dll文件一次之后就不能对my_dll.dll更改了,为什么?怎样解决? 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169.. 关于附件下载过程中权限控制的问题 如何编辑LILO文件? 糊涂啦。。。看看汉字库(hzk24)吧? 请问在listbox控件中如何设置特定行的颜色? 问一个关于ODBC的问题 急:因出差,明天(12.20,第二期)的“微软.net高级程序员培训”转让(包括资料)!今晚6:00前联系,13910321169.... 各位大侠,哪有设计专家系统的c语言的源代码阿(全分奉送)? 请问:如何处理MFC提供的CList类模板产生的异常问题呢? 散分!快抢! 调用对象 阿呆,只有你能救我了~~!!!!! 100大洋~~!!! Excel报表的汇总 请问VC有像Delphi或者C++Builder那样的作报表的工具吗? delphi怎么调用CHM文件啊? win98 登陆win nt Java远程调用的合法类型(legal types for Java RMI)都有哪些? 安装盘的制作问题 如何设置多个Timer? VFP的程序怎么才能运行在任何目录下?主程序应该怎么写? 这个问题很老套,但对于一个什么想成为一个优秀程序员的菜鸟来说,很重要,谢谢!进入........... @_@ 怎么灌水? 向资深灌水工请教! 难到这个问题没人回答吗?????http://www.csdn.net/Expert/topic/430/430088.shtm StringGrid中单元格合并问题? Delphi的TMainMenu和TPopupMenu没有Font属性,请问如何修改它们的字体? like 查询小问题 紧急求救:网管程序开发! 请问那理由chm格式的javascript的帮助可以下载啊? 这是为什么!---关于TQuery, Update, Sql 在WinCE中,怎样capture screen并存于bmp文件中? 将1~10这十个自然数分别填入图中的十个○内,使各条线段上四个○内数的和相等,每个三角形三个顶点上○内数的和也相等. 一个梯形,下底长14CM,高12CM,如果下底减少6CM,它就成为一个平行四边形.梯形的面积是多少? 153与145变速器怎样区分 一个梯形的下底是上底长度的3倍,将上底延长8厘米,则梯形变成平行四边形.梯形的上、下底各是多少厘米? 根号5在4*4方格上怎么画急 从一个边数为九的的多边形的一个顶点出发,连接这点与其余各顶点,将该多条边形分割成多少个三角形? 为什么水在沸腾的实验中,发现上升的气泡大小不一样:开始时,气泡上升时逐渐变小;沸腾后气泡上升时逐渐变大,这是为什么? 10*10的方格中怎样画根号三不用尺子等辅助工具:calli159 怎么画根号2与1垂直 插入一个图片 把一个长是12cm、宽9cm的长方形,拉成一个高为10cm的平行四边形,这个平行四边形的面积是多少 一个梯形的上底是下底的3倍,如果将梯形的下底延长8厘米,那么这个梯形变成了平行四边形.这个梯形的上、下底各是几厘米 要算式 利用4*4的方格画出边长为根号5的正方形只要算式,越快越好 把一个长12cm,宽6cm的长方形,拉成一个高是10cm的平行四边形,这个平行四边形的面积是( )cm2?今天就要啊 一个梯形的上底是下底长度的3倍,如果将梯形的下底延长8厘米,那么这个梯形就成了平行四边形.上下底分别多少厘米 两个同样的梯形上底长23cm下底长27cm高20cm如果把这两个梯形分拼成一个平行四边形平行四边形的面积是多少是练习册上的, 把一个长15cm,宽8cm的长方形,拉成一个高是12cm的平行四边形,这个平行四边形的面积是多少?还有三角形的面积一定,底和高成正比例这是对还是错? 梯形下底是上底的3倍,如果把上底延长8厘米就成了一个平行四边形,梯形的上底和下底是多少厘米 一个平行四边形的一条边是27cm,高是15cm,另一条边是18cm,另一条边上的高是多少? 把一个长12cm,宽8cm的长方形,拉成高为9cm的平行四边形,这个平行四边形的面积是?把一个长12cm,宽8cm的长方形,拉成一个高为9cm的平行四边形,这个平行四边形的面积是多少 主要过程 数学题(等腰三角形的周长为16,底边上的高为4,求等腰三角形的面积) 一个圆周上有9个点,以这9个点为顶点作3个三角形.当这3个三角形无公共顶点且边互不相交时,我们把它称为一种构图,满足这样条件的构图共有______种 东风天锦洒水车电路总开关在什么位置 数学题解答器等腰三角形底边上的高为8周长为32,则三角形的面积为? 平面α外的一侧有一个三角形,三个顶点到α的距离分别是7,9,13.则这个三角形的重心到α的距离为? △ABC内一点P,过P作三边的平行线,所得的小三角形面积分别为4,9,49那么△ABC面积是多少? 等腰三角形底边上的高为4厘米,周长为16厘米,求三角形的面积 正八边形的中心和顶点共9个点,以其中3个点为顶点的三角形有多少个 如图,过△ABC内一点分别做三边的平行线,形成三个小三角形①·②·③,如果这三个小三角形面积分别为4·9 在家自己用钢盆电解水,却发现有新物质生成,图中气泡为氢气,那黄色的就是不明物质,我用的水槽在家自己用钢盆电解水,却发现有新物质生成,图中气泡为氢气,那黄色的就是不明物质,我用的 平面上有9个点,以这些点为顶点,能组成多少个三角形 过△ABC内一点分别作三边的平行线形成三个小三角形①②③,如果这三个小三角形面积分别为4、9、16,求△ABC 一个梯形,上底长8厘米,如果下底缩短6厘米,则变成一个平行四边形,面积缩小了15平方厘米,梯形面积是C一个梯形,上底长8厘米,如果下底缩短6厘米,则变成一个平行四边形,面积缩小了15平方厘米, 平行四边形的周长是78cm,以CD为底时,它的高是18cm;AC是24cm,求它的面积. 一辆洒水车,洒水时每分钟行150米洒水宽度是6米.洒水车行驶23分钟,能给多大的地面洒上水 水平放置的小瓶内装有水,其中有气泡,当瓶子从静止状态突然向右运动时,小气泡在瓶内将向何方运动?当瓶子向右匀速运动突然停止时,小气泡在瓶内又将如和运动? 数学题:小红要建一个面积为40平方厘米的三角形纸片,它的一边是10cm,那么它这边上的高是【】? 一个平行四边形的周长是78CM(如图),以CD为底时,它的高是18CM,BC是24CM,求它的面积. 把一个长10cm宽8cm的长方形的框架拉成一个平行四边形这时面积减少了12平方cm平行四边形的高是多少cm用方程解 一个三角形的面积是100平方厘米,已知高是10厘米,则它的底是多少厘米? 一个平行四边形a.b.c.d周长是78cm,c.d作底边,高是18cm,bc长24cm,求梯形的面积? 桌上放一个装满水的瓶子,中间有一个气泡,用手推一下瓶子,气泡将是向前,但是气泡有惯性呀,不是先向原来位置的方向吗拜托,瓶子是横放的 ,气泡在液面 问一道数学题,等腰三角形斜边长为8厘米,因此三角形的面积是多少平方厘米? 一个平行四边形的周长是78CM,以CD为底时,它高是18CM,BC是24CM,求它的面积. 在三角形内一顶点引射线,当引到30条射线时有多少个三角形,规律及公式? 在网格中画出面积是根号10的正方形根号10不是周长 一个平行四边形的周长是78cm(如图),以CD做底时,它的高是18cm,又知BC是4cm,求这个梯形的面积 由三角形的一个顶点向对边引m条线段,可以得到多少个三角形?假设三角形个数为n,请写出n和m之间的关系式. 正方形网格中的每个正方形的边长都是1,以格点为顶点,画出一个三角形,使三边长分别是根号13,根号34,根号45. 一个多边形从一个顶点引出的对角线将它分成9个三角形,它是几边形? 1.三角形的中线是指连接三角形的一个顶点与它的对边的____的线段2.三角形的角平分线是指三角形的一个内角的____ __于对边交点的线段3.三角形的分类:①按___分,可分为______ _______ _______②按__ 将一个装满水静止瓶子向左推动,问水中气泡运动状况水具有惯性,仍保持原来静止的状态,但是既然瓶子已经运动,水怎么可能还会有静止的状态呢?高分悬赏 求解 一个梯形的下底是上底的二分之三倍,下底为18cm,高为10cm,这个梯形的面积 从三角形的一个顶点到它的对边作一条( ),( )之间的线段叫做三角形的高.( )叫做三角形的底. 正方形网格中画一个等腰三角形DEF,是它的腰长为根号5,且他的顶点都在都在格点上,一共可以画几个三角形..注意,彼此不全等 一个梯形的下底是上底的二分之三倍,下底为18cm,高为10cm,这个梯形的面积? 一辆运油的油罐车,油上方有气泡,当气泡突然想后运动时,此时车可能处于什么状态,为什么!要正确的答案, 水平放置的小瓶内装有水,中有气泡当瓶子突然从静止向右加速 则小气泡将如何运动 从九边形一顶点出发做对角线,可做几条对角线?,分成了几个三角形? 三角形的一个顶点到()的()线段叫做三角形的高 在上底18cm,下底30cm,高12cm的梯形中剪下一个最大的平行四边形,剩下的面积是多少平方厘米?列式计算 把一个八变形的一个顶点与其余各定点连接,可把这个八边形分割成几个三角形急!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn