利用Delphi实现图像的淡入淡出

利用Delphi实现图像的淡入淡出
来源:www.ccidnet.com

//ScanLine 参数只有一个,例:ScanLine[X] 代表扫描图像第X行,返回值为图像第X行的像素颜色。
我们在浏览网页时见过不少图像淡入淡出的特技,其实,用Delphi也可以实现这样的效果。  
用Delphi显示图像,有两个不可缺少的步骤,一是将图像装入Delphi隐形控件TBitmap中,二是用Canvas(画布)的Draw(x,y,Bitmap)或StretchDraw(Rect,Bitmap)方法将图像显示出来。淡出的效果就是将图像上每一个像素的颜色值进行设置,使它逐渐减少到0(黑色),实现图像的渐渐隐去。利用Canvas的Scanline属性可读取和设置图像每一行的像素颜色,我们就是利用它来实现特技的。淡入则是将一幅图像装入两个TBitmap对象,一个用来保存原始颜色,另一个用来处理,将像素的颜色从0逐渐递增到原始图的颜色,实现淡入的效果。  
准备工作:新建一个窗体并加入一个Image控件(用来显示图像特技),两个Button控件(用来切换淡入淡出)。下面我们将两个Button的Click事件源码介绍如下:  
unit   drdc;
interface
uses
Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   ExtCtrls,   StdCtrls;
type
TForm1   =   class(TForm)
Button1:   TButton;
Button2:   TButton;
Image1:   TImage;
procedure   Button1Click(Sender:   TObject);
procedure   Button2Click(Sender:   TObject);
private
{   Private   declarations   }
public
{   Public   declarations   }
end;
var
Form1:   TForm1;
implementation
{$R   .DFM}
procedure   TForm1.Button1Click(Sender:   TObject);
var
x,y,i:integer;
Bitmap:TBitmap;
pixcolo:PByteArray;
begin
Bitmap:=TBitmap.Create;
//创建TBitMap实例
try
Bitmap.LoadFromFile
( 'c:/windows/clouds.bmp ');
Bitmap.PixelFormat:=pf24bit;
for   i:=0   to   255   do
begin
for   y:=0   to   Bitmap.Height-1   do
begin
pixcolo:=Bitmap.Scanline[y];
//扫描每行像素颜色
for   x:=0   to   ((Bitmap.Width3)-1)   do
if   pixcolo[x]>0   then   pixcolo[x]:=(pixcolo[x]-1);
//递减颜色值,不同的递减值可改变不同的速度
end;
Image1.Canvas.Draw(0,0,Bitmap);
//画出图像
Application.ProcessMessages;
//系统做其他工作
end;
finally
Bitmap.free;   //释放位图
end;
end;
procedure   TForm1.Button2Click(Sender:   TObject);
var
x,y,i,j:integer;
Bitmap1,Bitmap2:TBitmap;
pixcolo1,pixcolo2:PByteArray;
begin
Bitmap1:=TBitmap.Create;
Bitmap2:=TBitmap.Create;
try
Bitmap1.LoadFromFile( 'c:/windows/clouds.bmp ');
//将同一幅图像装入两个TBitmap实例
Bitmap2.LoadFromFile( 'c:/windows/clouds.bmp ');
Bitmap1.pixelFormat:=pf24bit;
Bitmap2.pixelFormat:=pf24bit;
for   y:=0   to   Bitmap2.height-1   do
begin
pixcolo2:=Bitmap2.Scanline[y];
for   x:=0   to   ((Bitmap2.Width3)-1)   do
pixcolo2[x]:=0;
//先将要处理的图像的像素颜色值设为0
end;
for   i:=0   to   255   do
begin
for   y:=0   to   Bitmap2.Height-1   do
begin
pixcolo2:=Bitmap2.Scanline[y];
pixcolo1:=Bitmap1.Scanline[y];
for   x:=0   to   ((Bitmap2.Width3)-1)   do   if   pixcolo2[x]<pixcolo1[x]   then   pixcolo2[x]:=(pixcolo2[x]+1);
end;
//与原始图的像素颜色值比较,并递增其值直到与原始图相等
Image1.Canvas.Draw(0,0,Bitmap2);
Application.ProcessMessages;
end;
finally
Bitmap1.free
end;
end;
end.  

利用上面的程序,我们就在Delphi中初步实现了图像的淡入淡出效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值