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 := 0;

  TrackBar1.Max := 255;

  TrackBar1.Position := 128;



  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 := 0;

  BlendFunc.SourceConstantAlpha := TrackBar1.Position;



  if bit.PixelFormat = pf32bit then

    BlendFunc.AlphaFormat := AC_SRC_ALPHA

  else

    BlendFunc.AlphaFormat := 0;



  Windows.AlphaBlend(Canvas.Handle,                 {目标 DC}

                     30, 10, bit.Width, bit.Height, {目标位置与大小}

                     bit.Canvas.Handle,             {源 DC}

                     0, 0, bit.Width, bit.Height,   {源位置与大小}

                     BlendFunc                      {透明相关的结构}

                     );

end;



procedure TForm1.TrackBar1Change(Sender: TObject);

begin

  Repaint;

end;



end.


 
   
窗体文件:

object Form1: TForm1

  Left = 0

  Top = 0

  Caption = 'Form1'

  ClientHeight = 206

  ClientWidth = 223

  Color = clBtnFace

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'Tahoma'

  Font.Style = []

  OldCreateOrder = False

  OnCreate = FormCreate

  OnDestroy = FormDestroy

  OnPaint = FormPaint

  PixelsPerInch = 96

  TextHeight = 13

  object TrackBar1: TTrackBar

    Left = 8

    Top = 175

    Width = 207

    Height = 23

    ShowSelRange = False

    TabOrder = 0

    OnChange = TrackBar1Change

  end

end


 
   

你可能感兴趣的:(windows)