文档库 最新最全的文档下载
当前位置:文档库 › 基于Delphi屏幕截取软件的设计与实现

基于Delphi屏幕截取软件的设计与实现

基于Delphi屏幕截取软件的设计与实现
基于Delphi屏幕截取软件的设计与实现

文章编号:100622475(2007)0120118204

收稿日期:2006203203

作者简介:丛丽萍(19812),女,黑龙江齐齐哈尔人,大庆油田有限责任公司勘探开发研究院助理工程师,研究方向:软件工程在石油行业方面的应用;单延明(19692),男,吉林人,高级工程师,硕士;吴均(19692),男,黑龙江人,高级工程师,硕士。

基于Delphi 屏幕截取软件的设计与实现

丛丽萍,单延明,吴 钧,张 佳

(大庆油田有限责任公司勘探开发研究院,黑龙江大庆163712)

摘要:分析了基于Delphi 开发的一款功能全面的屏幕截取软件的技术原理,并介绍了该软件的强大功能及使用方法,同时给出了具体的程序代码。关键词:屏幕截取;Delphi ;API 函数中图分类号:TP311 文献标识码:A

Design and Implementation of Screen C apture Softw are B ased on Delphi

C ONGLi 2ping ,SH AN Y an 2ming ,W U Jun ,ZH ANGJia

(Exploration and Development Research Institute of Daqing Oilfield Limited C ompany ,Daqing 163712,China )

Abstract :This article mainly analyzes the technique principle of a function overall screen capture s oftware which is based on Delphi ,in 2troduces the strong function and operation method of this s oftware ,and gives a concrete program code in the meantime.K ey w ords :screen capture ;Delphi ;API

function

0 引 言

屏幕截取技术即是通过某种方法将所指定的(通常

是鼠标所指定的)屏幕上的字符或内容截取出来,根据用途和所要达到的目的可以对截取的内容进一步进行处理。因此,屏幕截取技术有很广泛的应用前景。

现在市场上有很多种屏幕截取软件,它们的功能不是过于简单就是过于复杂,很难满足大家的需求。本文介绍的这个屏幕截取软件包括9种常用的屏幕截取功能,支持双显示器屏幕的截取,可将图像保存为bm p 和jpg 格式,支持多种颜色模式,提供图象伸缩等辅助功能,具有较强的适用性和可扩展性。

1 软件功能介绍

该软件使用Delphi 2006开发,主要包括9种屏幕

截取功能:捕捉桌面,快速捕捉桌面,捕捉双显示器桌面,捕捉活动窗口,捕捉区域,捕捉对象,捕捉多边形区域,捕捉图标,捕捉固定范围。同时还包括放大缩小图像,自定义延迟时间,自动保存图像到剪切板,设置颜色模式等辅助功能,功能强大而且使用简单方便,屏幕截取软件主界面如图1所示。

图1 屏幕截取软件主界面

文件:包括新建、打开、保存、关闭、打印和退出等几种功能。

编辑:包括复制、粘贴、剪切和撤消几种功能。颜色:截取完图像后可改变颜色模式。包括黑白,16色等几种颜色模式。

选项:包括最小化(当选择捕捉功能后,主界面是否自动最小化,并在固定时间内恢复)、自动保存到剪切板、包含鼠标(捕捉屏幕时包含鼠标)、显示提示、延迟(主界面最小化到恢复所需的时间)和设置默认文件夹(设置保存图像的默认路径)。

计算机与现代化

 2007年第1期

J IS UAN J I Y U XI ANDAIH UA

总第137期

比例:在比例中拖动游标可以对捕捉后的图像进行放大和缩小操作。

捕捉:包括屏幕截取的9种功能,对双显示器进行操作时捕捉桌面、快速捕捉桌面、捕捉活动窗口、捕捉区域、捕捉对象、捕捉多边形区域、捕捉图标和捕捉固定范围都是只针对当前使用的屏幕(软件所在屏幕)进行截取,只有捕捉双显示器对双显示器的两个屏幕同时进行截取。具体说明如下:

(1)捕捉桌面:完成对当前桌面内容的截取。如果在选项中选中了包含鼠标,点击捕捉桌面功能后,在屏幕上确定鼠标位置点击左键完成包含鼠标的屏幕截取。

(2)快速捉屏:

完成对当前桌面内容的截取。与捕捉桌面功能不同之处为在选项中选中了包含鼠标后,在延迟时间内自动完成包含鼠标的屏幕截取,需要在延迟时间内确定鼠标的位置。

(3)

双显示器:完成对所有显示器桌面的截取,如果是双显示器,则将截取两个桌面内容存放到一张位图上(如图2)。在选项中选中了包含鼠标后,时间内自动完成屏幕的截取,

需要在延迟时间内确定鼠标的位置。

图2 截取双显示器屏幕

(4)活动窗口:只捕捉当前活动的窗口内容。在

选项中选中了包含鼠标后,在延迟时间内自动完成屏幕的截取,需要在延迟时间内确定鼠标的位置。

(5)捕捉区域:

截取当前选中的矩形范围内的内容。(6)捕捉对象:截取鼠标选中的对象,可用于截取工具条等(如图3)。

图3 截取对象

(7)多边形:在屏幕上点击鼠标左键绘制多边形

区域,放开左键完成对多边形区域内图像的截取(自动将其放到一个最小的矩形中,如图4)。

(8)捕捉图标:捕捉当前矩形选中的一个32332

像素大小的图标。

(9)捕捉固定范围:选中此功能后弹出设置矩形范围对话框,设置完成后,截取矩形范围内图像。

2 技术原理

图4 截取多边形

我们都知道Windows 系统里的应用程序的显示

输出是通过调用系统显示的API 函数来实现的(图5)[1]。因此我们应该从屏幕显示的过程中寻找一个可以切入的入口,从而达到屏幕显示截取的目的。

图5 Windows 屏幕显示基本原理

该软件主要使用了Windows 中的几种API 函数

来实现屏幕截取的功能,其中主要使用了G etDesktop 2Window 函数获得代表整个屏幕的一个窗口(桌面窗口)句柄,G etDC 函数获得指定窗口的设备场景,G etWindowRect 获得指定窗口的矩形范围内的设备场景,G etCurs orP os 函数获得光标位置,BitBlt 函数将一幅位图从一个设备场景复制到另一个设备场景,Re 2leaseDC 函数释放获得的指定设备场景等来实现屏幕截取。

另外,该软件使用自定义组件T ASG ScreenCapture 来实现有关屏幕截取的方法。然后在可视化界面中调用该组件的方法来完成屏幕的截取,使程序代码更加清晰易读。

3 程序设计及主要功能实现

首先自定义组件T ASG ScreenCapture 用于实现有

关屏幕截取的主要功能。例:完成快速捉屏的主要功能代码如下(其他功能类似):

function T ASG ScreenCapture.S peedCaptureDesktop :T Bitmap ;var

Handles :HW ND ;ScreenDC :H DC ;Rect :TRect ;

Curs orIn fo :T Curs orIn fo ;hCurs or :HIcon ;rCurs or :TIconIn fo ;iCurs orLeft :integer ;iCurs orT op :integer ;iM ouseThread :Cardinal ;iCurrentThread :Cardinal ;P :TP oint ;ActHandles :HWnd ;

9

11 2007年第1期丛丽萍等:基于Delphi 屏幕截取软件的设计与实现

ActRect:TRect;

M:Integer;

dml:Integer;

dmt:Integer;

dm w:Integer;

dmh:Integer;

begin

Handles:=G etDesktopWindow();

ScreenDC:=G etDC(Handles);

try

//得到鼠标位置信息

G etCurs orP os(P);

Curs orIn fo.cbS ize:=S izeO f(Curs orIn fo);

G etCurs orIn fo(Curs orIn fo);

iM ouseThread:=G etWindowThreadProcessId(WindowFrom2 P oint(P),nil);

iCurrentThread:=G etCurrentThreadId();

if iCurrentThread=iM ouseThread then

hCurs or:=G etCurs or()

else

begin

AttachThreadInput(iCurrentThread,iM ouseThread,T rue);

hCurs or:=G etCurs or();

AttachThreadInput(iCurrentThread,iM ouseThread,False);

end;

G etIconIn fo(hCurs or,rCurs or);

//确定当前要截取屏幕的显示器

if(fM onitorNum>=0)and(fM onitorNum<=Screen. M onitorC ount-1)then

M:=fM onitorNum{Override}

else

M:=Screen.M onitorFromP oint(P,mdNearest).M onitor2 Num;

//得到显示器的信息

dml:=Screen.M onitors[M].Left;

dmt:=Screen.M onitors[M].T op;

dm w:=Screen.M onitors[M].Width;

dmh:=Screen.M onitors[M].Height;

fObjectLeft:=ActRect.Left-dml;

fObjectT op:=ActRect.T op-dmt;

P.X:=P.X-dml;

P.Y:=P.Y-dmt;

G etWindowRect(Handles,Rect);

fBitmap.Width:=Screen.M onitors[M].Width;

fBitmap.Height:=Screen.M onitors[M].Height;

//复制图像

BitBlt(fBitmap.Canvas.handle,0,0,Screen.M onitors[M]. Width,Screen.M onitors[M].Height,ScreenDC,Screen.M onitors [M].Left,Screen.M onitors[M].T op,G etBitBlt-R opM ode());

//是否包含鼠标

if fShowCurs or then

begin

iCurs orLeft:=P.X-Integer(rCurs or.xH otspot);

iCurs orT op:=P.Y-Integer(rCurs or.yH otspot);

if(P.X>0)and(P.Y>0)and(P.X

DrawIconEx(fBitmap.Canvas.Handle,iCurs orLeft,iCurs or2 T op,Curs orIn fo.hCurs or,0,0,0,0,DI-NORM A L);

end

end;

finally ReleaseDC(Handles,ScreenDC);end;

Result:=T Bitmap.Create;

Result.Assign(fBitmap);

end;

另外对于捕捉区域、捕捉图标和捕捉固定范围还需要对矩形框进行操作,用矩形框的位置和大小得到所截取图像的位置和大小,再使用函数BitBlt复制图像。

绘制矩形框代码如下:

LineDDA(X1,Y1,X2,Y1,@M ovingD ots,LongInt(Can2 vas));

LineDDA(X2,Y1,X2,Y2,@M ovingD ots,LongInt(Can2 vas));

LineDDA(X2,Y2,X1,Y2,@M ovingD ots,LongInt(Can2 vas));

LineDDA(X1,Y2,X1,Y1,@M ovingD ots,LongInt(Can2 vas));

擦除矩形框代码如下:

R:=N ormalizeRect(Rect(X1,Y1,X2,Y2));//Rect2 angle might be flipped

In flateRect(R,1,1);//Make the rectangle1pixel larger InvalidateRect(Handle,@R,T rue);//Mark the area as invalid

In flateRect(R,22,22);//N ow shrink the rectangle2pixels ValidateRect(Handle,@R);//And validate this new rect2 angle.

UpdateWindow(Handle);

定义好组件T ASG ScreenCapture后,将该组件包导入到Delphi中。然后新建工程,设计该屏幕截取软件的界面,在相应的功能中调用组件中对应的方法,如,在快速捉屏的按钮点击后运行如下代码:

procedure TF ormMain.CaptureS peedDesktopItemClick(Sender: T Object);

var

My Bitmap:T Bitmap;

begin

if PageC ontrol1.PageC ount<>0then

begin

My Bitmap:=ASG ScreenCapture1.S peedCaptureDesktop;

try

021计 算 机 与 现 代 化2007年第1期

Image.Picture.Assign(My Bitmap);

finally;

My Bitmap.Free;end;

with ScrollBox do

begin

H orzScrollBar.Range:=Image.Picture.Width;

VertScrollBar.Range:=Image.Picture.Height;

end;

if not Image.Picture.G raphic.Empty then

UpdateS tatusBar;

//颜色模式

Image.Picture.Bitmap.PixelF ormat:=pfDevice;

S tatusBar1.Panels[4].T ext:=′C olor Depth:Device′;

//放大缩小图像

T rackBar1.P osition:=100;

PercentItem.Caption:=IntT oS tr(T rackBar1.P osition)+′%′;

Image.Width:=Max(1,R ound(Image.Picture.Width3 T rackBar1.P osition/100));

Image.Height:=Max(1,R ound(Image.Picture.Height3 T rackBar1.P osition/100));

end;

end;4 结束语

本文主要介绍了基于Delphi开发的一款屏幕截取软件的功能和实现,从屏幕显示截取的基本原理入手,找到相关的API函数用于实现屏幕的截取。本文列出的几段代码基本构成了在Windows系统上实现屏幕截取功能的代码框架。

读者只要掌握了屏幕显示技术的基本原理,再结合具体操作系统中的一些实现该原理的技术手段,就能够较容易地开发出各种各样基于屏幕显示截取技术的应用程序。

参考文献:

[1] [美]Daniel Appleman.Windows API接口大全[M].郭勇,

等译.北京:电子工业出版社,1995.

[2] 毕维峰,赵爱玲.Delphi7编程实例与技巧[M].北京:航

空工业出版社,2003.

[3] 本书编写组.Delphi7组件编程参考手册[M].北京:人民

邮电出版社,2003.

[4] 肖建.Delphi7编程实例教程[M].北京:北京希望电子出

版社,2002.

(上接第91页)

3 模型特点

(1)跨平台:X M L是跨平台数据表示和交换的标准;JMS基于Java语言,因而也是平台无关的。JMS 和X M L一起共同实现了平台无关的行为和平台无关的数据。

(2)异步性:请求数据的应用系统与发送数据的应用系统不需要同时连接。

(3)涵盖广:系统不仅集成了各种关系数据库,还集成了Native X M L数据库,扩展了原有模型的数据共享范围。

4 结束语

本文提出了一种基于JMS和X M L的数据集成模型,侧重介绍了JMS与原生X M L数据库相结合的数据集成的设计和实现,扩展了一般基于X M L的数据集成和共享模型。Native X M L数据库技术已经日趋成熟,它们不仅支持最新X M L技术标准,实现有效的X M L查询,还提供了传统数据库的事务、锁定等功能,有些数据库还具备对传统数据的管理功能,对现有模型的扩展有着重要的现实意义。

参考文献:

[1] R onald Bourret.X M L and Databases[DB/O L].http://w w w.

rpbourret.con/xm1/X M LAndDatabases.htm,2005209220. [2] 逯鹏,吕良双,高庆一.Native X M L数据库技术综述[J].

计算机科学,2004,31(4).

[3] 刘刚,喻成.Native X M L数据库的研究与应用[J].微机发

展,2005,15(8).

[4] 吴永英,吕继云,班鹏新.基于JMS和X M L的数据集成研

究[J].计算机应用研究,2004,21(7).

[5] 谢芳华,任午令,唐任仲.基于X M L的异构数据交换集成

技术及其实现[J].制造业自动化,2004,26(4).

[6] Arun G ai K wad.X indice简介[DB/O L].http://w w w2128.

https://www.wendangku.net/doc/2b8950955.html,/developerw orks/cn/xml/x2wa2xindice/index.html, 2002209201.

[7] Lars Marin.X Update2X M L Update Language[DB/O L].

http://xmldb2org.s https://www.wendangku.net/doc/2b8950955.html,/xupdate/,2000211224. [8] K imbro S taken.Members of the X M L:DB API Mailing List,Ap2

plication Programming Interface for X M L Databases[DB/O L].

http://xmldb2org.s https://www.wendangku.net/doc/2b8950955.html,/xapi/,2001209224.

121

 2007年第1期丛丽萍等:基于Delphi屏幕截取软件的设计与实现

delphi制作多文档界面

最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI示范程序,这个程序的功能是打开和保存图形文件(包括位图、图标等),为了完成这个任务,我们有一个大概的计划,计划内容如下: (1)建立主窗体(一个MDI父窗体),包括菜单。 (2)为【File | Open…】和【File | Save…】菜单选项编写代码。 (3)为Windows菜单上的Cascade、Tile和Arrange All选项编写代码。 (4)建立MDI子窗体。 (5)建立一个About对话框。 (6)然后再回忆和欣赏一下这段工作。 时间就是金钱,即刻就做吧。 一、创建主窗口窗体 首先创建一个主窗口窗体,一个MDI应用程序的主窗口的FormStyle属性必须设置为fsMDIForm。不但要为应用程序增加File Open和File Save 对话框,还要增加一个菜单。 1、启动Delphi,并从主菜单选择【File | New | Application】; 2、把主窗体的Name属性设置为MainForm; 3、把Caption属性设置为Picture Viewer; 4、把FormStyle属性设置为fsMDIForm; 好了,下面为此窗体增加一个菜单,利用Delphi特性,引进一个预定义菜单,具体如下:1、点击组件选项板的Standard标签,并点击MainMenu按钮;

2、把MainMenu组件点击放置到窗体上,具体放到哪个地方无所谓了,因为在运行阶段,代表菜单的图标只是占地方而不显示,这是非可视化组件。 3、把MainMenu组件Name属性改为MainMenu; 4、双击MainMenu组件,就会出现Menu Designer对话框; 5、在MainMenu上点击鼠标右键,选择“Insert From Template…”,将出现Insert Template对话框;

Delphi中ComPort通信中的数据处理范文

Delphi中ComPort通信中的数据处理 1.串口通信的基本原理: 一般计算机与外部设备通讯有两种方式: 并行传送(Parallel ):一次的传输量为8个位(1字节),通过并行端口,如打印机 串行传送(Serial ):一次只传输1个位,通过串行端口,如RS-232 位与字节的概念: 二进制中的每一位0和1,被叫做一个位,每8个位构成一个字节 一个字节中最右面的位被称为第0位,最左面的位被称为第7位。 传输过程中的字节类型:一般有两种。 1.文本(字符字母、标点符号等)在计算机中存储时,每个不同的字符都用不同的数值来表示。这些数值的范围通常在0-127或0-255范围。 7位:ASCII码,每个字节留一个备用位 8位:前128个遵循ASCII码规则,其余的128个用来做扩展字符、数字符号、图形字符等编码。 2.二进制数据: 某些可执行指令文件和图形图像文件就是以二进制形式而不是ASCII码形式存储的。 一个数据可用二进制形式存储,可以占多个字节。在通信领域,常常把这种类型的资料叫做二进制数据。 今天要讲的就是有关二进制数据的处理方法。 几个概念: 波特率:每秒所能产生的最大电压状态改变率(一秒钟可以振荡的次数)bps 通信双方必须要取得一样的通信速度。原始信号经过不一样的波特率取样后,所得的结果完全不一样,如取样速度只有原来一半时,信号被跳着取样,数据因此错误。 数据位:有5,6,7,8四种 停止位:在奇偶位(选择有奇偶校验)或数据位(选择无奇偶校验)之后发送或接收的停止位。停止位的长度可在1、1.5或2位三者中选择)。 奇偶校验位:数据传输之后是可供选择的奇偶校验位发送和接收。奇偶位的状态取决于选择的奇偶校验类型。如果选择奇校验,则该字符数据中为1的位数与校验位相加,结果应为奇数。可选奇,偶或无。 如果要保证通讯畅通。通讯双方以上4项设置必须一致。 一个字节是8位,数据位可以7位,然后一位校验位就8位了。 这些参数可以自己设置。但是如果要保证通讯畅通。通讯双方以上4项设置必须一致。 2.Delphi中串口通信常用的常用控件 进行串口通讯可以用Windows的Api函数: Delphi的Windows.pas单元文件中已经将Win32 API均声明进去,因此在Delphi 里面使用API时只要在uses 区段中加入Windows,使其引用该单元文件即可。

delphi制作登陆界面

///////////////////// (一)项目文件 test.dpr ////////////////////// program SerialGet; uses Forms, UMain in UMain.pas {frmMain}, ULogin in ULogin.pas {frmLogin}, UDataModule in UDataModule.pas {DataModule1: TDataModule}, {$R *.res} begin Application.Initialize; if CreateMutex then //创建句柄,判断此应用程序是否在运行 begin //调用全局函数,创建并显示登陆界面 if doLogin then //登陆成功 begin Application.CreateForm(TfrmMain, frmMain); //数据模块文件不须在这儿创建,因为 ULogin.pas 中已创建 //Application.CreateForm(TDataModule1, DataModule1); Application.Run; end else //登陆不成功 begin try DataModule1.free; Application.terminate; except end; end; end else begin DestroyMutex; //释放句柄 end; end. //////////////// (二)登陆窗体 ULogin.pas ULogin.dfm ////////////////// unit ULogin; interface uses ...... type ... ... ...

Delphi存取SQL SERVER2000中JPEG图像和BMP图像

Delphi存取SQL SERVER2000中存取图片 解决数据库中图片的问题,关键技术如下: 在数据库上使用Image二进制字段保存,使用Stream流的方式。 创建文件流: Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate); Word_FileStream.Position:=0; 保存到数据库的Image字段: TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream); 从数据库读取文件到本地硬盘: TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream); 释放文件流: Word_FileStream.Free; Server中该字段的数据类型是Image,在Access中该字段的数据类型是OLE对象。... 既然你已经用TDBImage控件使用Picture.LoadFromFile装入了图片,只要该图片字段和TDBimage控件相连了,直接用adodataset.post,就保存到了数据库。 如果没有相连,可以直接用Tblobfield(adodataset.fields[字段名]).loadfromfile从文件中读,或Tblobfield(adodataset.fields[字段名]).loadfromstream从stream中读, 要读出该字段内容,用相应的savetofile,savetostream就行了 注意如果是jpeg图片,要引用jpeg单元,即:uses jpeg; 综合以上,既能识别bmp又识别读jpeg,我把代码修改如下: (建议用image,不要用dbimage控件,因为该控件只能识别bmp格式图片) (程序已调试,运行正确delphi7 + sql server 2000) 我的数据库是这样的: id varchar(50) name varchar(50) pic image(16) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls; type TForm1 = class(TForm) DataSource1: TDataSource; ADOQuery1: TADOQuery;

用delphi设计图书管理系统

《数据库技术与应用》 大作业 题目:数据库应用系统的设计和实现 适用专业: 指导老师: 班级: 姓名: 学号: 中南大学信息科学与工程学院 2010 年1月

图书是人类文明的见证,随着高科技的发展各式各样图书越来越多,图书馆和书店的管理也越来越复杂。如今图书管理系统是一 个书店或一个图书馆的必备系统。一个安全可靠并且对于用户比较实用的图书管理系统来说变得尤其重要。 本次设计设计了一个在DELPHI平台基于SQL Server 2000开发出的图书管理系统。在系统的设计上面实现了该系统的交互式界面。 从系统的需求分析、系统设计、系统实现入手,详细阐述了一个 C/S 结构的图书管理信息系统主要功能的实现过程。每一阶段均给 出了相应的理论依据和实现内容,并介绍了系统实现部分的主要算法。整个系统的设计与开发严格按照软件工程思想进行,从需求分析到系统设计和实现、从原型系统设计到迭代完善,本图书管理系统涵盖了六个主要的子系统:图书资料管理、读者资料管理、借书 操作、还书操作、删除、修改和查询处理,提高了工作的准确率和效率。 本图书管理信息系统是利用计算机管理信息处理的迅速、准确、可靠且具有强大存储能力的突出特点,全面提高图书馆的管理水平 和工作效率,并以及时、完整的业务经营资料,为图书馆的及时转换提供一定的支持。

关键词:数据库,SQL server2000,Delphi 7,图书管理系统 1.1 课题研究现状分析 在现金信息化发达的社会,图书的发行量与日俱增。因此需要对书籍资源、读者资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利用管理效率的提高。传统的图书馆需要制作有署名与对应编号的书卡,由读者按分类查找再交由图书管理员来处理借书工作,还书也要人工翻阅大量的记录,这样使得工作量大并及其繁琐,效率变得低下。建立网上电子图书管理系统的目的是实现无纸化图书管理,减轻管理员的工作量,方便读者查阅所需的图书,还可以利用网络实现提醒读者还书的功能。管理员还可以对各种图书进行分析统计,对过时、损坏的图书进行删除。达到降低成本提高工作效率的目标。 1.1.1本领域内已开展的研究工作 1. 理论研究基础 (1)数据库设计方法的完整化、多样化,又有多学科的综合性。 (2)数据库设计步骤的规范化和细致化。 (3)数据库技术不断的更新,并不断增加新的技术,兼容性范围也逐渐扩大。2. 技术层面的支持 SQL Server的普遍应用,并得到的用户的支持,与Windows操作系统的完全兼容性也决定了它在今天仍然有着庞大的使用群体。SQL Server2000作为后台数据库与前台开发软件Visual Basic、C#、Visual C++、Delphi等都能够无缝连接。 1.1.2已经取得的研究成果 (1)开发出了一套系统的数据库理论,安全性、完整性、并发性、恢复性都有完整的概述。 (2)随着Internet的迅猛发展,数据库在各个领域作为后台存储得到了广泛的 支持。 (3)完善的数据库管理并与前台开发软件的结合使用开发了一系列优秀的图书管理系统,在商业、经济等方面得到了广泛的应用。

由Delphi中的图像灰度化代码看基本图像处理

CSDN - 专家门诊 - Delphi 图形处理/多媒体问题 推荐 | 保存 | 关闭窗口 主题:由Delphi中的图像灰度化代码看基本图像处理~~~ 作者: ehom (?!) 等级: 信誉值: 190 所属论坛: Delphi 图形处理/多媒体 问题点数: 33 回复次数: 23 发表时间: 2003-02-27 12:48:11Z [基础篇] 首先看一段实现24位色图像灰度化转换的代码 procedure Grayscale(const Bitmap:TBitmap); var X: Integer; Y: Integer; R,G,B,Gray: Byte; Color: TColor; begin for Y := 0 to (Bitmap.Height - 1) do begin for X := 0 to (Bitmap.Width - 1) do begin Color := Bitmap.Canvas.Pixels[X,Y]; R := Color and $FF; G := (Color and $FF00) shr 8; B := (Color and $FF0000) shr 16; Gray := Trunc(0.3 * R + 0.59 * G + 0.11 * B); Bitmap.Canvas.Pixels[X,Y] := Gray shl 16 or Gray shl 8 or Gray; end end end; {这段代码效率是非常低的,但可以方便我们理解同时一些问题} Delphi的帮助中对TColor已经有了详细的描述,这可以方便我们理解上面的代码! 首先看: R := Color and $FF;

Delphi中JPEG图像对象的使用技巧

第z1卷第1期2000年1月微计算机应用MICROCOMPUTERAPPLICATIONSV01.21,No.1Jan.,2000 Delphi中JPEG图像对象的使用技巧” 袁梅字 (云簿j二韭大学}}彝祝系琵鹱650051) 擒鬟;本文以实倒介绍如何把婵EG图像数据写入数据库申并显示以及如何读写JPEG图像数 据文件.另外.还说明了其他编褴语言如何利用JPEG图像对象。 装镰词:JPEG压缩Delphi 1前意 JPEG(JointPhotographicExpertsGroup)是连续惫诞耱壹藿像懿垂嚣稼壤,基广泛痉曩于}}算机秘通信锈域,铡魏电褫阉像悉雅、多媒诲遥信、多媒体计算梳、图像数据瘁等。JPEG的一个最著特点是它的压缩比相辫高,在无可见失真的情况下,可达到10:1刘20:1。文献[1]在PowerBuilder中实现了把BMP文件襻^数据库中并显示,佩缺点是没有压缩过的图像数据占用数据库过大的警间。文献[2]实现了JPEG的压缩算法,并且应用到数据库中,但要每一位程序员都用C+十来编JPEG的服雅子铡程,浪费精力最没宥必要。而Detphi3、Delphi4是支持JPEG戆,照JPEG标准过于复杂,{嚣虽除Delphi静斑线帮动静摄步有壹拜簿襞掰它的资辩,这绘应掰程穿燕带来了穰多塞溪。势越,奉文结合鑫蠢瓣缡程经验,奔绍如何在Delphi中使用JPEG对象。 2JPEG对象 TJPEGImage是在Delphi中封装的JPEG图像,它支持对JPEG压缩图像数据的读和写。在计算机系统中,我们使用TJI,EGImage对静止图像压缩秘解压缩。TJPEGImage采用TJPEGData对象熬实婀孛翦数援,这些数据包含了褰燕懿JPEG数据漂,劳纛不蕤黪袭。TJPEGImage有一内部静包含JPEG图像的位图,蠹256龟,它积JPEG的数攥渫一祥是更凄的。TJPEGImage对象有不步属性和方法,这些属性和方法决定如何读写JPEG数据。2.1TJPEGImage的主要属性 (1)CompressionQuality(压缩质量)属性。该属性用于设置JPEG图像的聪嫡质量。它只用于写(臌缩),而不用于读(鼹聪缩)JPEG图像。该属性的类型是TJPEGQualityRange,为从1到100辩数。TJPEGQualityRange秘蓬越大,图像静臻璧邈毫,僵銎像文{孛静疑废也越长。 本文予1999一懈一16收到。1999一06—2l收到修改穑。 *本文获蠢南工业大学校立基金资助。   万方数据

delphi可视化编程讲稿

第三章D e l p h i的窗体与组件 教学要求: 掌握窗体、编辑类组件、按钮类控件、列表类控件、分组类组件、时钟组件、菜单组件、工具栏组件和工具按钮、多选项卡的的属性、方法与事件,学会使用这些组件设计应用程序的界面。 掌握ShowMessage、ShowMessageFmt、MassageDlg、MassageDlgPos、InputBox、InputQuery对话框函数与对话框过程的特点,并能熟练应用。熟悉公共对话框控件组件的属性,方法、事件及应用。 掌握创建新窗体的两种不同的方法及其应用。 掌握windows的模式与非模式窗体的概念及应用方法。 掌握焦点的含义,与焦点相关的属性,应用焦点设计程序的方法。 了解CreateMessageDialog函数的定义与用法、speedbutton和文件有关的控件的属性、方法与事件。

从本章开始,将介绍Delphi 编程的一些基本方法。通过这一部分的学习,可以了解开发Windows 环境下应用程序的一些关键技术,并可以方便、快捷地开发一般的应用程序。 为了简化编程工作,Delphi 提供了许多功能强大的函数和类。其中很重要的一部分就是组件类。本章将重点介绍常见组件及其编程应用。 现在深入普及的Windows操作系统中,方便快捷的人机交互界面主要是通过窗体和对话框实现的。在Delphi中,这些窗体和对话框就是程序设计阶段的窗体,Delphi的可视化设计工作就是在窗体中进行的。 通常,窗体中会有文字输入、滚动条、复选框、单选框、按钮等一系列组件,通过这些直观易懂的组件,可以方便的实现多种多样的功能。在Delphi中,这些运行期间出现在窗体和对话框中的组件称为可视组件。在窗体中,还可以放置一些运行期间非可视的组件,对应其它的TComponent子类。这些不可视组件集中地实现了一些特殊的功能。比如,时钟控制等功能。 ●TComponent组件类,所有的组件都是由这个类派生来的。 ●TControl子类(可视组件)可分为两类:窗体组件和图 形组件。

Delphi的图形处理

Delphi的图形处理 Delphi的图形处理......................................................................................................- 1 - 第一章图像处理在可视化编程中的作用及其应用价值.................................- 2 - 第二章图像处理函数.......................................................................................- 2 - 2.1 为什么选择Delphi..............................................................................- 2 - 2.2 Delphi中用于图形处理的类...............................................................- 2 - 2.3 GDI及Canvas类简介.........................................................................- 4 - 第三章基本图像处理算法.............................................................................- 13 - 3.1柔化和锐化处理.........................................................................................- 13 - 3.2 图像混合(透明度)效果..............................................................................- 19 - 3.3 转为灰度图像............................................................................................- 22 - 3.4 对比度调整和反色处理.............................................................................- 23 - 3.5 亮度的调整................................................................................................- 25 - 3.6 浮雕效果....................................................................................................- 28 - 3.7 马赛克效果................................................................................................- 31 -

delphi中的图像处理

图像处理基本知识彩色变灰度 把一图由彩色变成灰度,也就是把每个像素的RGB各分量变为相同的,就成了灰度图像了 pf24bit 模式下 用BMP 的ScanLine 可以读取每一行的RGB数据.得到的是一个指针 字节顺序是B,G,R 亮度Y = 0.229R + 0.587G + 0.114B 这个公式相当重要.以后很多图像处理都要用到它. 方法1: 方法一很简单,把RGB各分量相加,计算平均值,再设为新的RGB 方法2: 找出RGB 各分量中最大的.再设成新的RGB 值 方法3: 根据工式: Y = 0.229R + 0.587G + 0.114B 算出亮度. 新的RGB 各分量都为这个值. (个人认为第三种方法比较科学) 代码: (方法一. 其它方法类似) bmp := TBitmap.Create; Bmp.Assign(Image1.Picture.Bitmap); bmp.HandleType :=bmDIB; bmp.PixelFormat := pf24bit; for j := 0 to bmp.Height -1 do begin p := bmp.ScanLine[j]; for i := 0 to Bmp.Width - 1 do begin gray1 :=Byte( (p[i*3] + p[i*3+1] + p[i*3+2]) div 3); p[i*3] := gray1; p[i*3+1]:= gray1; p[i*3+2] := gray1; end; end; Image2.Picture.Bitmap.Assign(bmp);

bmp.free; ============================== 二值化: 与灰度不同,二值化只有两种颜色.一般在做一些识别时用得比较多. 方法: 1, 计算出像素的亮度, 定义一个亮度阈值. 2. 亮度大于这个阈值的像素,颜色为白, 小于这个阈值的像素,颜色为黑. ======================================= 亮度调节 取各个像素的RGB值,按比例加/减一个增量. 也许用亮度公式来算出这个比例,比较科学. 按一定比例,把部分的RGB 提升,一部分下降. ================================-==== Gamma校正 (不太明白用在哪里.) 分别把RGB 设为Min(255, round(255 * Power((OldValue / 256), 0.45))); NewValue := 255 乘(OldValue /256) 的 0.45 次方 ====================== 反色 各分量取反. ====================== 爆光 小于128的取反

Delphi编程图像处理在针织物疵点检测中的应用

计算机应用 Delphi编程图像处理在针织物疵点检测中的应用 李日东,朱文俊,杨 柳 (西安工程大学纺织与材料学院,陕西西安710048) [摘要] 简介了针织物常见疵点,并采用可视化编程工具Delphi进行编程,综合利用噪声处理、二值化处理、边缘增强、边缘检测、二值图像细化等一系列图像处理和识别方 法,对针织物进行疵点检测,提出了图像处理在针织物疵点检测中的一般方法。 [关键词] 针织物疵点;图像处理;疵点检测 [中图分类号]TP391 41 [文献标识码]A [文章编号]1003 1308(2009)03 0051 06 1 引 言 织物疵点检测在纺织品检测中是最重要的检测项目之一。长期以来,疵点的检测都是由人工视觉完成的,也就是检测人员先按照自己的经验对织物进行评分,再根据评等标准对织物等级做出评定,并填写各种织物疵点报表。这种方法存在着较明显的缺陷,如劳动强度大、效率低、漏检率高等。另外,这种方法受检测人员主观因素的影响也较大,因而难以得到准确的检测结果。 随着近年来计算机技术的飞速发展,图像处理技术已经应用于越来越多的行业,在纺织品检测中,其优点在于能够快速、直观地反映二维信息体,既可以减少检测人员主观上的干扰,还可以改变目测识别时的效率低下。目前,图像处理技术在纺织品领域中的应用主要分为三类:纤维检测、纱线检测和织物的检测。 其中,纤维检测主要是针对纤维横截面形状、直径、网棉均匀度、纤维异型度等方面进行检测。纱线检测主要是针对纱线细度、直径、纱线混合状态等方面进行检测。而在织物方面,主要是针对织物褶皱分析、织物表面纹理分析,以及织物疵点等进行检测。 本文将从针织物的疵点检测入手,对图像处理在纺织疵点检测中的应用进行研究。纺织品疵点检测的具体流程如图1所示。 2 针织物的常见疵点 织物疵点大多是在编织和后整理过程中形成的,不仅种类繁多,而且疵点大小不一,形态各异[1]。就针织物而言,常见的疵点有横裆疵、鸟眼花纹疵、细支纱疵、纹路歪 [收稿日期]2009 04 06;[修订日期]2009 06 10

delphi的精美界面设计

Delphi界面设计专辑 [前言:]界面的美观和用户亲和性是应用软件成功的首要条件,因此界面往往是程序员最费心的地方。在这个专辑中,将向读者全面介绍Delphi中界面设计的原则和技巧 窗体设计 制作固定大小的Form 固定的Form像一个对话框,何不试试下面的语句 巧用Delphi制作溅射屏幕 精心编写的WINDOWS程序显示启动注意事项,称之为溅射屏幕(splash screen)。利用一点儿小小的内容,即可给程序的显示添加不少色彩 LED数码管仿真显示程序 在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色 菜单设计 DELPHI中自适应表单的实现 我们知道,屏幕分辨率的设置影响着表单布局,假设你的机器上屏幕分辨率是800*600,而最终要分发应用的机器分辨率为640*480,或1024*768,这样你原先设计的表单在新机器上势必会走样 作非常规程序菜单掌握delphi高级秘籍 大家可能见过诸如金山毒霸,瑞星杀毒,以及五笔输入法等等在系统托盘(即右下角有时间和输入法图标的地方)在的控制菜单,而在正常的任务栏(即屏幕最下方的“开始”按钮的右边的各式各样)中却不出现按钮的程序,即我们常说的在后台运行的程序 用Delphi制作动态菜单 所谓动态菜单是指菜单项随着程序的操作变化而变化。现在,我们用Delphi来实现这一功能,具体步骤如下 工具栏和状态条 为Windows窗口标题栏添加新按钮 对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮。你想不想在Windows的窗口标题栏上添加一个新的自定义按钮用Delphi4实现风Word97格的工具栏 用过Word97的人对它的工具栏印象很深刻,因为它的风格很“酷”,同样IE4.0的工具栏也有类似的风格,Win98的出现,使这种风格的工具栏得到了推广 如何隐藏和显示Windows的任务条 如果隐藏和显示Windows的任务条?仅仅调用以下的函数就可以. 其他技巧 Delphi利用Windows GDI实现文字倾斜 在Delphi开发环境中,文字的输出效果一般都是头上脚下的"正统"字符,如何输出带有一定倾斜角度的文字以达到特殊的显示效果呢 Delphi之三十六计之界面篇 设置状态栏面板对象的Style为OwnerDraw,并在状态栏对象的DrawPanel事件中书写以下代码 利用COM技术实现外壳扩展的属性页 当用户在资源管理器中调用右键菜单时,会显示一个"属性"菜单项,点击属性菜单项会显

Delphi用BusinessSkinForm 做界面皮肤的使用说明

Delphi用BusinessSkinForm 做界面皮肤的使用说明 注意:新版的Delphi 已经用bsCompressedStoredSkin 代替了bsStoredSkin 1、先放bsBusinessSkinForm、bsSkinData、bsStoredSkin(bsCompressedStoredSkin)各一个到窗体上 2、修改bsBusinessSkinForm的SkinData属性为bsSkinData1 3、修改bsSkinData1的StoredSkin属性为bsStoredSkin1 4、修改bsStoredSkin1的filename属性,指向一个皮肤文件,例如我的55套皮肤包是放在C:\Program Files\Borland\Delphi7\BSF-Skins\Skins文件夹里,我就修改 bsStoredSkin1的filename属性为C:\Program Files\Borland\Delphi7\BSF-Skins\Skins\Animate\skin.ini 5、在delphi设计窗口中按下F9 6、爽吧!!!!! 第一步-安装: 1、双击BSFD7.dpk文件,在delphi 7.0中打开 2、单击compile按钮,你会发现原来不可用的install按钮可以使用了 3、单击install按钮,会弹出来一个对话框提示你“安装成功!” 4、将所有源文件复制到C:\Program Files\Borland\Delphi7\Lib文件夹中(如delphi安装路径不同的话,请各位老兄自行更改) 第二步-最基本的使用方法: 当你安装成功后,你会在delphi的组件面板上发现三个控件组,它们是: businessskinform vcl和businessskinform db vcl和businessskinform vcl dialogs,顾名思义,第一个是常用组件,第二个是数据库组件,第三个是对话框组件。 按照下面的步骤,不用写一行代码,你可以马上做出一个有漂亮界面的程序来 1、先放bsBusinessSkinForm、bsSkinData、bsStoredSkin(在businessskinform vcl控件组中)各一个到窗体上 2、修改bsBusinessSkinForm的SkinData属性为bsSkinData1 3、修改bsSkinData1的StoredSkin属性为bsStoredSkin1

基于 DELPHI 的图像漫游

基于Delphi的图像漫游 在开发多媒体应用中,经常会遇到需要在有限区域内显示大图像的情况,有不少 文章对此提出过解决方法,如通过调用Windows的API函数,直接读写内存等。 这些方法有某些优点,但实现起来较为复杂,且易出错?收咴谑导型邢该 利用Delphi的强大的面向对象可视化开发环境开发了一种交互式图像漫游方法。Delphi中,鼠标的消息响应是通过元件的OnMouseDown、OnMouseUp和OnMouseMove事件实现的,通过对此三个事件编程,可控制图像在有限区域内移动。考虑到所移动的图像的边界应总在该区域外,因此图像的左上角坐标应小于该区域对应坐标,图像右下角坐标应大于该区域对应坐标(除非图像大小比该区 域小)。图1具体方法是: 1、新建一工程Project1,在Form1中依次放入Panel1、Panel2和Image1元件,注意Pa nel2和Image1分别在Panel1和Panel2上,再将一 Label1元件加入Panel2中,调整Panel1尺寸为适当大小,并修改各元件属性为: 元件属性名属性值 Panel1 BevelInner: bvRaised BevelOuter: bvNone BorderStyle: bsSingle Panel2 Align: alClient Image1 AutoSize: True Picture: "Apple.bmp" Label1 Align: alClient Transparent : True 注意:此处Label1的作用不是显示字符,而是利用它响应鼠标消息,如 果不用Label1而直接利用Image1的鼠标事件响应,则会由于其OnMouseDown事件的激活与Image1的自身坐标移动事件冲突而使图像发生闪烁甚至不能移动。2、在implementation后加入变量声明: origin:Tpoint; image_left:integer; image_top:integer; visa1:Tpoint; (鼠标当前位置相对图像右下角的坐标) visa2:Tpoint; (鼠标当前位置相对图像左上角的坐标) canmove:boolean; 编写Label1鼠标响应事件: procedure https://www.wendangku.net/doc/2b8950955.html,bel1MouseDown(Sender: TObject; Button : TMouseButton;S hift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin

Delphi XE FireMonkey 自带Demo体验与效果图

Delphi XE FireMonkey Demo体验与效果图 版本:Delphi XE6 FireMonkey DEMO:delphi FireMonkey自带 DEMO路径,在DELPHI XE6安装目录下:E:\Documents and Settings\All Users\Documents\Embarcadero\Studio\14.0\Samples 1●TabSlideTransition(分页可滑动翻页) 功能:每页可填写,并支持可滑动翻页 路径:Samples\Object Pascal\Mobile Samples\User Interface\TabSlideTransition 开启界面:

2●TabletMasterDetailWithSearch(查找联系人,定位,并显示明细) 功能:可以查找列表联系人,并定位,和显示明细 路径:Samples\Object Pascal\Mobile Samples\User Interface\TabletMasterDetailWithSearch 开启界面:

3●Settings Project(系统设置) 功能:打开USB调试,WIFI等设置 路径:Samples\Object Pascal\Mobile Samples\User Interface\Settings Project 开启界面:

4●ScrollableForm(滚动编辑框) 功能:滚动编辑框 路径:Samples\Object Pascal\Mobile Samples\User Interface\ScrollableForm 开启界面:

相关文档