copy 来的,呵呵:用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.Width3)-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.Width3)-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.Width3)-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.
现图像的渐渐隐去。利用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.Width3)-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.Width3)-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.Width3)-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.