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

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

VB如何改变 NT 预设的打印机? VB如何改变 Windows 预设的打印机 VB如何关闭其他程序 VB如何过滤键盘录入 VB如何获得Windows95已经运行的时间 VB如何检测左右键同时按下? VB如何检查您的电脑是否打开 ActiveDesktop? VB如何将程序建立成“启动”文件夹的捷径? VB如何将程序建立成「启动」资料夹的捷径。 VB如何结束 Shell 所启动的程序? VB如何拦截键盘输入 如何判定VB调用的一个EXE程序已经结束. VB如何判断某一个Drive是否为光碟机? VB如何清空回收站? VB如何取得汉字的区位码 VB如何去优化你的VB程序 VB如何让点阵打印机每次印出一行? VB如何设计一个可中断循环的按钮。 VB如何实现VB程序登录密码加密 VB如何使程序不出现在任务列表中 VB如何使键盘、Mouse失效(JournalPlayBack Hook) VB如何使用 DBGrid VB如何突破 TextBox 32K 的限制? VB如何为执行程序加上参数? VB如何压缩较长的全路径文件名中的路径 (Path) 字串长度? VB如何在VB中实现密码的读取 如何在VB中使用命令行参数 VB如何在内存中的指定位置取数据? VB如何在已经存在的文本的textbox添加新的一行 VB如何在資料庫中存入單引號? VB如何正确使用VB6访问Access2000数据库 怎样在pb8中改一个windows 的名字. 有关windows rpc 编程的问题 如何把JPG图片存入数据库? 老大:Node<T>这个是什么意思?MSDN也没说,还有template <class T>又是什么意思?小弟不明白 datagrid中的问题:删除datagrid中的记录时出现的问题。 求助:TextBox中输入中文简繁体日文的乱码问题,谢谢! 一段小小的Java程序,请指点指点!!!多谢! 请大家都来关注!谢谢 各位,怎样在C#里面声明定长的字符或定长的数据 MFCGridCtrl的问题,很难,但我还是要碰碰运气! 数据窗口中某列(列名为AA)的编辑风格设为DropDownListBox,在脚本中怎样添加DropDownListBox中的内容? 再次请教EJB. 我想做钱能编的《C++程序设计》习题集的网站! 怎样可以得到当前window对应于屏幕的坐标呢 请问在vs.net编写aspx时,怎样才能在写.时,后面的属性或方法能出来 能告诉我ORACLE触发器的语法吗? 怎么画不出图来? 如何定一个文件类型的变量? 水晶报表,多列(分栏)打印 如何使安装程序汉化?我使用的是installshield6.2 谢谢! datagrid中的问题:删除datagrid中某行时出现的问题。 使得窗口总是处于最前的函数是什么,谢谢 请教:如何用Sql实现查询本周发的帖子?? 如何用程序设置ie的页面设置中的页眉,页脚,边距和方向? 为什么要学Java http://Scjp.myrice.com 也许你的一切会改变! 请问怎么修改InstallShield中的可选项,如Typical、Compact、Custom等。 如何.定制通用对话框中的路径及文件名? 我照着网站上的中文输入法提示,做了可没效果 为什么要学Java 看 http://Scjp.myrice.com 也许你的一切会改变! 回答问题,我给500分!! 语音聊天用什么软件好?qq,netmeeting,yahoo message or icq? 为什么不能汇编成功? 各位,帮我一下,非赏急! 数据库快照复制问题,总出错,求救!(50分) 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 在VB中怎样设置Excel单元格的样式?如设置为百分数显示单元格数值? 下拉菜单问题? 请问这是怎么一回事。win2k(p)+tomcat+jdk1.4.` 求救,我财务系统的问题,大大们一定要帮助我呀! 我在调试jsp是的一个错误信息,请指教~~~ 急!!! 一个烦人的问题 关于在应用程序中使用dll中资源的问题 關於並行執行的問題 也许你现在就会改变!! 看 http://Scjp.myrice.com 为什么要学Java 其实我们很封闭! 关于NT的小问题! 请问: 請問哪里有c++的書籍下載? 几个控件重叠在一起,怎样用代码的方式使其中的某个控件在运行时放至最上!?谢! 也许你现在就会改变!! 看 http://Scjp.myrice.com 其实我们很封闭! 如何发布我的网站? 我的动物朋友作文最好是小狗的,写出它与我的关系,它颜色.样子,爱好,爱吃什么!(急,就今天,明天就要交作业了!) 甲乙丙三杯的水量分别是100毫升,200毫升,60毫升,在这三杯水中分别加入20毫升,4甲乙丙三杯的水量分别是100毫升、200毫升、60毫升,在这三杯水中分别加入20毫升、40毫升、15毫升的蜂蜜要把三杯 抛物线y^2=2x与直线y=4-x围成的平面图形的面积(积x计算) 作文 我的动物朋友500字以上哦! 有甲乙丙三杯水.第一次从甲杯倒出水到乙丙两杯,使两杯各增加1倍;第二次从乙杯到出水到甲丙,使甲丙两杯也各1倍.这时三杯水都是64克.原来甲杯有水(  )克 20句写得优美的句子, 求!一篇我的动物朋友的作文500字就行,谢谢! 甲乙丙三杯水里各装有水……求一道数学题甲乙丙三杯水里各装有水若干毫升,现将甲杯中的水倒入乙杯中,使乙杯中水加倍;然后把乙杯水倒一些入丙杯中,使丙杯的水加倍;又把甲杯中的水倒 人教版初一上册语文书 双曲线X的二次方/9-Y的二次方/16=1的渐近线方程是? 甲乙丙三杯水共重十二分之十一千克,其中甲乙水共重四分之三,甲丙共重三分之二.甲乙丙每杯水重多少? 怎么样用一个可以装5千克水的捅和一个可以装3千克水的桶装出4千克的水 求与双曲线y平方/9-x平方/16=1有共同渐近线,且过点M(-3,2倍跟号3)的双曲线方程 求抛物线y^2=x和直线y=x-2所围成的平面图形的面积 蝴蝶是否是昆虫不是 什么蜇人的昆虫用泥建穴 求由抛物线y=1-x^2;x=0,x=2及y=0所围成的平面图形的面积 蝴蝶是昆虫吗 马蜂蜇人后会死蜇棉铃虫后为什么不会死? 求抛物线y∧2=x与直线y=x-2所围成的平面图形的面积 水怎么样用一个可以装5千克水的捅和一个可以装3千克水的桶装出4千克的水 作文,你从动物或植物得到什么启发,350字左右 写动物或植物的作文可以写些什么 能寄生在人的大脑上的寄生虫是什么 苏教版 的初一上册语文书背诵地方的课文(有的是作业要背的)我出去旅游但是把语文书忘在家了苏教版 的初一上册语文书背诵地方的课文(有的是作业要背的)这是我的作业 描写“日”的300字短文. 蚂蚁的村落作文一篇400字 初一上册的语文书课文的目录 快………………………………初一上册的语文书课文的目录快…………………………………………………………………… 形容一个眼睛不大,说话还行,嘴巴挺小(不是樱桃嘴)的女生怎么形容(一段话,不用太多我已经写了,可以不回答 写一篇作文:蚂蚁的村落,400字 初一的语文书课文是什么? 鹅毛雪,柳叶眉,樱桃嘴,这类的词语前两个表示物品 求抛物线y=x^2与直线y=4所围成的图形面积越快越好 谢谢 甲瓶中有8千克油,另有乙、丙两个空瓶,分别能装油5千克和3千克,请你设计一下,如何利用这三个瓶把甲瓶的油分成两个4千克? 甲瓶中有8千克油,另有乙,丙两个空瓶,分别能装5千克和3千克,请你设计一下,如何利用这三个瓶把甲的油分成两个4千克? 以《蚂蚁的村庄》为题,写一篇500字作文注:《草虫的村落》是范文今天,我又趴在草丛边,在无限的静谧中,忘了世界也忘了自己.在我眼前,空前变大了,小草成了大森林.一只小蚂蚁,独自四处走 甲瓶有8千克油,另有乙,丙两个空瓶,分别能装5千克和3千克,如何利用这三个瓶把甲瓶的油分成两个4千克? 女人说自己的樱桃是什么意思 求直线y=x+2与抛物线y=x^2所围成的图形面积是多少? 求教这些是什么种类蚕蛾的幼虫名称dirphia sp(familia saturniidae)eucanella sp(familia saturniidae) 形容女生的嘴巴的词语有哪些 一篇200字观察蚂蚁的 作文 ( )是蚕的幼虫,蚕蛾是蚕的( ). 苍蝇是昆虫吗 求由抛物线y=x^2与y=2-x^2所围图形的面积 有谁有赞美美食的诗句啊? 6课的生词 求由抛物线y2=2x 及直线 y=x-4=0所围成的平面图形的面积 赞美南瓜饼好吃的句子 过p(1,0)作抛物线y=根号(x-2)的切线,求切线方程 由抛物线y=x^2,与直线y=2x+3所围成的平面图形的面积 描写美食的诗句 数学在线解题器y=根号下x过(-1,0)点的切线与y=根号下x,x=0所围成的平面图形的面积 求抛物线y=2x的平方.与直线y=2x+4所围平面图形的面积. 甲瓶有8油千克,乙丙两个空瓶分别装油5千克和3千克问怎么把甲瓶的油分成两个4千克呢 求抛物线y^2=4(1-x)在(0,2)处的切线和x轴所围成的平面图形,绕x轴旋转所得的旋转体的体积 求抛物线y=x^2与直线y=2x所围平面图形的面积 作文 《我的动物朋友》描写你和小动物之间发生的事 500字 甲瓶装油8千克,另外有乙、丙两个空瓶,分别能装油5千克,请你设计一下.如何把甲瓶的油分成两个四千克? 求一些优美的描写的句子
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘