新浪首页免费邮件用户注册网站地图
上移动梦网
赢手机大奖

新浪首页 > 科技时代 > 网上学园 > 高级编程 > 正文
利用Delphi实现图像的淡入淡出

http://www.sina.com.cn 2001/08/16 14:07 赛迪网-中国计算机报 杨德海

  我们在浏览网页时见过不少图像淡入淡出的特技,其实,用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

  {.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 ouds.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 ouds.bmp');

  //将同一幅图像装入两个TBitmap实例

  Bitmap2.LoadFromFile('c:windows ouds.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中初步实现了图像的淡入淡出效果。



发表评论】【初学者园地】【科技聊天】【关闭窗口

新 闻 查 询

 相关链接
用Delphi开发ASP分页组件 (2001/07/31 10:57)
看实例学Delphi编程四例 (2001/07/11 17:24)
Delphi趣味编程实例三则 (2001/06/12 14:55)
用Delphi打造RealPlayer播放器 (2001/06/05 17:36)
用Delphi控制Windows的关闭功能 (2001/05/09 17:13)
利用Delphi开发旅游景点微机售票系统 (2001/02/13 16:25)
Delphi控件的使用经验 (2000/10/18 14:31)


科技时代意见反馈留言板 电话:010-82612286   欢迎批评指正

网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息 | 网站律师

Copyright © 1996 - 2001 SINA.com, Stone Rich Sight. All Rights Reserved

版权所有 四通利方 新浪网