⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图形的特殊显示效果 (2001年1月8日).txt

📁 自己对DELPHI学习的一点体会
💻 TXT
字号:
图形的特殊显示效果 (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; 

  本程序只是一个简单的图像显示例子,其它图像显示方法,如:拉幕式、百叶窗式、马赛克式、中心向外扩展式均可以由算法实现。 

 
 


--------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -