如题,请给个程序代码,最好的把整个pas源文件给我,呵

解决方案 »

  1.   

    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.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.