VCL 中的 Windows API 函数(5): AlphaBlend

时间:2023-03-09 22:55:11
VCL 中的 Windows API 函数(5): AlphaBlend
AlphaBlend 是指定图像混合透明的函数, 在 Graphics、GraphUtil、RibbonStyleActnCtrls 单元用到.

下面的测试是把一张图片显示在窗体, 并可以调整透明度.


本例效果图:

VCL 中的 Windows API 函数(5): AlphaBlend



代码文件:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls; type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  end; var
  Form1: TForm1; implementation {$R *.dfm} var
  bit: TBitmap; procedure TForm1.FormCreate(Sender: TObject);
begin
  bit := TBitmap.Create;
  bit.LoadFromFile('c:\temp\Test.bmp');   TrackBar1.Min := ;
  TrackBar1.Max := ;
  TrackBar1.Position := ;   DoubleBuffered := True;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
  bit.Free;
end; procedure TForm1.FormPaint(Sender: TObject);
var
  BlendFunc: TBlendFunction;
begin
  BlendFunc.BlendOp := AC_SRC_OVER;
  BlendFunc.BlendFlags := ;
  BlendFunc.SourceConstantAlpha := TrackBar1.Position;   if bit.PixelFormat = pf32bit then
    BlendFunc.AlphaFormat := AC_SRC_ALPHA
  else
    BlendFunc.AlphaFormat := ;   Windows.AlphaBlend(Canvas.Handle,                {目标 DC}
                    , , bit.Width, bit.Height, {目标位置与大小}
                    bit.Canvas.Handle,            {源 DC}
                    , , bit.Width, bit.Height,  {源位置与大小}
                    BlendFunc                      {透明相关的结构}
                    );
end; procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Repaint;
end; end.