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