可以用ps蒙板来实现,用代码也可以:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, PngImage;
type
TForm1 = class(TForm)
ImageBmp: TImage;
ImageBmpMask: TImage;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBuffPng: TPNGObject;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, J: Integer;
LSourceAlphaAry: pByteArray;
begin
FBuffPng := TPNGObject.Create;
SetPngSize(ImageBmp.Width, ImageBmp.Height, FBuffPng);
for J := 0 to FBuffPng.Height - 1 do
begin
LSourceAlphaAry := FBuffPng.AlphaScanline[J];
if Assigned(LSourceAlphaAry) then
begin
for I := 0 to FBuffPng.Width - 1 do
begin
FBuffPng.Pixels[I, J] := ImageBmp.Canvas.Pixels[I, J];
LSourceAlphaAry[I] := (ImageBmpMask.Canvas.Pixels[I, J] and $FF);
end;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FBuffPng);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, FBuffPng);
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, PngImage;
type
TForm1 = class(TForm)
ImageBmp: TImage;
ImageBmpMask: TImage;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FBuffPng: TPNGObject;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
I, J: Integer;
LSourceAlphaAry: pByteArray;
begin
FBuffPng := TPNGObject.Create;
SetPngSize(ImageBmp.Width, ImageBmp.Height, FBuffPng);
for J := 0 to FBuffPng.Height - 1 do
begin
LSourceAlphaAry := FBuffPng.AlphaScanline[J];
if Assigned(LSourceAlphaAry) then
begin
for I := 0 to FBuffPng.Width - 1 do
begin
FBuffPng.Pixels[I, J] := ImageBmp.Canvas.Pixels[I, J];
LSourceAlphaAry[I] := (ImageBmpMask.Canvas.Pixels[I, J] and $FF);
end;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FBuffPng);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(0, 0, FBuffPng);
end;
end.