ZT:
CopyRect 方法:从其原型CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect)
可看出,它将源画布某一矩形区域的图像复制到另一个画布的
矩形区域。由于是内存的成块复制,因此具有很高的执行效率。
在Timer 组件的OnTimer 事件程序中灵活使用该函数,可以设计出各
种美观演示效果:如百叶窗、推拉、马赛克、随机线、反像等等。
将以下代码加入到OnTimer 事件程序,可演示各种图像效果,这里
仅举出两种效果,读者可参考有关资料设计更多更漂亮的演示
效果。
......
case PlayMode of
0:begin //从左向右移动(设x初值为Screen.Width)
x:=x-10;
SCRSaverFrom.CopyRect(Rect
(x,0,x+10,Screen.Height),Bit.Canvas,
Rect(x,0,x+10,Screen.Height));
if x=0 then ChangePictureAndPlayMode;//改变图像及演示模式
end;
1:begin //马赛克
for i:=0 to Screen.Width*Screen.Height div 10 do
begin
j := Random(Screen.Width div 4)*4;
k := Random(Screen.Height div 4)*4;
SCRSaverFrom.CopyRect(Rect(j,k,j+4,k+4),Bit.Canvas,
Rect(j,k,j+4,k+4));
end;
SCRSaverFrom.CopyRect(Rect
(0,0,Screen.Width,Screen.Height),Bit.Canvas,
Rect(0,0,Screen.Width,Screen.Height));
ChangePictureAndPlayMode; //改变图像及演示模式
end;
2: ......
......
end;
在DELPHI中能够实现图像象素操作的有两种方法即两个命令,即Copyrect及BitBlt,具体使用方法如下:
1.Copyrect(Dest:TRect;Canvas:Tcanvas;Source:TRect);其中
est:目标画布矩形Canvas:源画布Source:源矩形,这是一个DELPHI内部的命令,它主要用于某些控件的画布操作,即CANVAS属性下支持的一个图像复制命令,其功能是把图像从一个源RECT内,复制到目标RECT内,复制的图像具有自动伸缩性质,其功能类似于WINDOWSAPI函数的BITBLT,但操作相对简单;例如命令:
form1.canvas.copyrect(rect2,bitmap.canvas,rect1);
则实现把RECT1中图像复制到窗体的RECT2中;用此命令实现镜像操作的过程是,首先从源图像上的边缘定义宽度为1的矩形RECT,同时从屏幕的中央位置向两侧定义相同尺寸的两个矩形RECT,之后把源图像写到两个目标RECT之中,通过循环过程完成整个图像的重写过程,即在屏幕上出现完整的镜像显示效果。
2.BitBlt(hDestDC,x,y,nWidth,nHeight,hSrcDC,xSrc,ySrc,dwRop)这是一个WINDOWSAPI函数,在DELPHI中由于不用做单独的API函数说明,可以和调用DELPHI内部函数一样使用,所以使用非常方便;其中hDestDC源设备句柄,xy目标矩形右上角坐标,nWidthnHeight为目标矩形的宽度和高度,hSrcDC目标矩形句柄,xSrcySrc源位图矩形左上角坐标,dwRop光栅操作码,比如SRCCOPY为正常拷贝;利用此命令操作起来更为方便,无需事先定义操作区域,全部工作由BitBlt的参数完成,其原理就是把源图像的像素逐条向屏幕的两个方向拷贝,即可完成镜像显示效果。
无论是利用上述的哪个命令,具体操作过程中可通过目标区域的灵活控制,实现具有特殊效果的镜像显示,比如从中心向外显示,或者从两侧向中心显示等等。