delphi 编程技巧

源代码在线查看: 图形的特殊显示效果 (2001年1月8日).txt

软件大小: 774 K
上传用户: zyhunicom
关键词: delphi 编程技巧
下载地址: 免注册下载 普通下载 VIP

相关代码

				图形的特殊显示效果 (2001年1月8日) 
				
				网友更新  分类:图形图象   作者: nbwzw(推荐)  推荐:nbwzw   阅读次数:485  
				(http://www.codesky.net)  
				
				--------------------------------------------------------------------------------
				  Delphi的绘图功能十分强大,而它的绘图功能大部分都集成在Canvas中了,Canvas是一个对象,在这个对象中,几乎拥有了Windows GDI的所有功能,在Delphi中,所有的图形函数实际上均隶属于Canvas对象,而不是属于表单。这意味着只要包含Canvas对象的资源均可用于绘图,例如TDrawGrid、TShape、TImage等组件。 
				
				  在了解Canvas的功能之后,可利用Canvas的成员函数来实现图形的特殊显示效果。 
				
				  一、实现原理 
				
				  1.实现图形特殊显示效果的方法有很多,举一个比较简单的例子,实现一幅图像的下拉效果,方法是将一幅图像分成n等份(n个大小相等的矩形),然后分成n步,一次拷贝一个矩形到要显示的位图上,这样就实现了图像的下拉显示效果。 
				
				  2.有关Canvas的函数 
				
				  在Delphi中调用Canvas的矩形拷贝函数,函数原型如下: 
				
				  procedure CopyRect(Dest:TRect;Canvas:TCanvas;Source:TRect); 
				
				  该函数可以实现两个图像之间任意矩形块的拷贝,参数说明如下: 
				
				  Dest:指定目标图像矩形块的位置及大小 
				
				  Canvas:指定源图像的Canvas 
				
				  Source:指定源图像矩形块的位置及大小 
				
				  其中,矩形区域定义可通过函数: 
				
				  Rect(ALeft,ATop,ARight,ABottom:Integer)获得。 
				
				  拷贝的方式通过Canvas的另一个属性CopyMode实现,CopyMode共有3个属性值: 
				
				  cmSrcCopy:不加任何改变的从源位图拷贝到目标位图 
				
				  cmBlackness:将目的位图以黑色填充 
				
				  cmWhiteness:将目的位图以白色填充 
				
				  二、程序设计 
				
				  1.在Delphi3中新建表单Form1,在表单上放置两个和源图像大小相同的TImage组件image1和image2,用image2的picture调入图像,并将Visible属性值设为False;再放置一个TTimer组件Timer1,根据图像显示快慢设置Interval值,本程序设置为300。 
				
				  2.程序代码如下(本程序将图像分5个矩形块) 
				
				  * 添加私有成员 
				
				   private 
				
				   { Private declarations } 
				
				   DestCanvas:TCanvas; 
				
				   SrcCanvas:TCanvas; 
				
				   DestRect:TRect; 
				
				  * 添加变量k   
				
				  var 
				
				   Form1: TForm1; 
				
				   k:Integer;//在.pas的开头处添加代码 
				
				  * 初始化变量k=0 
				
				  procedure TForm1.FormCreate(Sender: TObject); 
				
				  begin 
				
				  k:=0; 
				
				  end; 
				
				  * Timer的事件处理过程 
				
				  procedure TForm1.Timer1Timer(Sender: TObject); 
				
				  var 
				
				   i,j,j0:integer; 
				
				   arect1,arect2:Trect; 
				
				  begin 
				
				   i:=image2.Width; //变量赋初值 
				
				   j:=image2.Height; 
				
				   j0:=Trunc(image2.Height/5); 
				
				   with DestCanvas do 
				
				   begin 
				
				  arect2:=Rect(0,j0*k,i,j0*k+j0); //源矩形块的位置及大小 
				
				  arect1:=Rect(0,j0*k,i,j0*k+j0); //目标矩形块的位置及大小 
				
				  Self.DestCanvas:=Image1.Canvas; //指定目标图像的Canvas 
				
				  Self.SrcCanvas:=Image2.Canvas; //指定源图像的Canvas 
				
				  SrcCanvas.CopyMode:=cmSrcCopy; //设置拷贝方式 
				
				  DestCanvas.CopyRect(arect1,SrcCanvas,arect2); //实现块拷贝 
				
				  k:=k+1; 
				
				  if k=5 then Timer1.Enabled:=FALSE; 
				
				   end; 
				
				  end; 
				
				  本程序只是一个简单的图像显示例子,其它图像显示方法,如:拉幕式、百叶窗式、马赛克式、中心向外扩展式均可以由算法实现。 
				
				 
				 
				
				
				--------------------------------------------------------------------------------
							

相关资源