预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Delphi编程的图像显示技巧 Delphi编程的图像显示技巧 来源:编程爱好者网站作者:编程爱好者网站发布时间:2008-04-0217:02:17 域名注册 域名惊喜价格cn域名1元注册 com域名39.9元 虚拟主机 主机按月支付,低至19元/月 超大流量,可开子站点 VPS主机 特惠VPS168元/月,4-8M独享带宽保证 独立操作系统,无限开站点 发软件时经常需要加入各种图像的特效显示效果,这样能使画面变得更为生动活泼,增加软件的趣味性,使软件更加受欢迎。本文将探讨怎么在Delphi编程中实现移动、交错、瀑布状、百叶窗和积木堆叠等各种图像特效显示效果。 基本原理 在Delphi中,实现图像的显示是非常简单的,我们只要在Form中定义一个TImage组件,设置其picture属性,然后选择所有有效的.ICO、.BMP、.EMF或.WMF文件,进行载入,所选文件就会显示在TImage组件中。但这只是直接将图像显示在窗体中,毫无技巧可言。为了使图像显示具有特别效果,我们能按下列步骤实现: 1.定义一个TImage组件,把要显示的图像先装入到TImage组件中,作为图像缓存; 2.创建一新的位图对象,其尺寸跟TImage组件中的图像相同; 3.利用画布(Canvas)的CopyRect功能(将一个画布的矩形区域拷贝到另一个画布的矩形区域),使用技巧,动态形成位图文件内容,然后在窗体中显示位图。 实现方法 首先在窗体上定义一个Image控件Image1,载入一幅图像(注意将其AutoSize设为True,Visible设为False),再定义6个按钮控件,分别设置Caption为“推拉”、“垂直交错”、“水平交错”、“瀑布”、“百叶窗”、“积木”,图像特效的编程原理和按钮的Click程式分别如下。 1.推拉效果 将要显示的图像由上、下、左、右方向拉进屏幕内显示,同时将屏幕上原来的旧图覆盖掉,此种效果可分为四种:上拉、下拉、左拉和右拉,但原理都差不多,笔者程式以上拉效果为例。 >原理: 首先将放在缓存中图像的第一条水平线,搬移至要显示的位图的最后一条,接着再将缓存中图像的前两条水平线,按顺序搬移至要显示位图的最后两条水平线,然后搬移前三条、前四条?……?直到全部图像数据搬完为止。在搬移的过程中即可看到显示的位图由下而上浮起,而达到上拉的效果。 >程式算法如下: procedureTForm1.Button1Click(Sender:TObject); var newbmp:TBitmap; i,bmpheight,bmpwidth:integer; begin newbmp:=TBitmap.Create; newbmp.Width:=image1.Width; newbmp.Height:=image1.Height; bmpheight:=image1.Height; bmpwidth:=image1.Width; fori:=0tobmpheightdo begin newbmp.Canvas.CopyRect(Rect(0,bmpheight-i,bmpwidth,bmpheight),image1.Canvas,Rect(0,0,bmpwidth,i)); form1.Canvas.Draw(120,100,newbmp); end; newbmp.free; end; 2.垂直交错效果 >原理: 将要显示的图像分成两部分,奇数条扫描线由上往下搬移,偶数条扫描线的部分则由下往上搬移,而且两者同时进行。从屏幕上便可看到分别由上下两端出现的较淡图像向屏幕中心移动,直到完全清晰为止。 >程式算法如下: procedureTForm1.Button4Click(Sender:TObject); var newbmp:TBitmap; i,j,bmpheight,bmpwidth:integer; begin newbmp:=TBitmap.Create; newbmp.Width:=image1.Width; newbmp.Height:=image1.Height; bmpheight:=image1.Height; bmpwidth:=image1.Width; i:=0; whilei<=bmpheightdo begin j:=i; whilej>0do begin newbmp.Canvas.CopyRect(Rect(0,j-1,bmpwidth,j),image1.Canvas,Rect(0,bmpheight-i+j-1,bmpwidth,bmpheight-i+j)); newbmp.Canvas.CopyRect(Rect(0,bmpheight-j,bmpwidth,bm