delphi
编程技巧
源代码在线查看: 图形的特殊显示效果 (2001年1月8日).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;
本程序只是一个简单的图像显示例子,其它图像显示方法,如:拉幕式、百叶窗式、马赛克式、中心向外扩展式均可以由算法实现。
--------------------------------------------------------------------------------