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


    AlphaBlend 是指定图像混合透明的函数, 在 Graphics、GraphUtil、RibbonStyleActnCtrls 单元用到.

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

    本例效果图:



    代码文件:
    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:	empTest.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.

  • 相关阅读:
    hive_case
    hive_group
    linux-搭建ngnix
    Nfs服务器搭建
    几种常见的启动脚本
    linux 修改本机的端口映射
    oracle-sql计算
    linux 磁盘大小查看
    postMan测试接口的几种方式
    oracle迁移到12c的时列转行 wm_concat 报错解决
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/3844369.html
Copyright © 2020-2023  润新知