显示图像,有两个不可缺少的步骤,一是将图像装入Delphi隐形控件TBitmap中,二是用Canvas的Draw(x,y,Bitmap)或StretchDraw(Rect,Bitmap)方法将图像
unit Unit1;// 淡出的效果就是将图像上每一个像素的颜色值进行设置
interface // 使它逐渐减少到0(黑色),实现图像的渐渐隐去
uses // 利用Canvas的Scanline属性可读取和设置图像每一行的像素颜色
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
// 淡入则是将一幅图像装入两个TBitmap对象,一个用来保存原始颜色
type // 另一个用来处理,将像素的颜色从0逐渐递增到原始图的颜色,实现淡入的效果
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
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;
try // 创建TBitMap实例
Bitmap.LoadFromFile('c:/windows/clouds.bmp');
Bitmap.PixelFormat := pf24bit;
for i := 0 to 255do
begin
for y := 0 to Bitmap.Height - 1do
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 - 1do
begin
pixcolo2 := Bitmap2.Scanline[y];
for x := 0 to ((Bitmap2.Width-3) - 1)do
pixcolo2[x] := 0;
// 先将要处理的图像的像素颜色值设为0
end;
for i := 0 to 255do
begin
for y := 0 to Bitmap2.Height - 1do
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.