文档章节

WinAPI: AlphaBlend - 图像透明度

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 386
阅读 6
收藏 0
AlphaBlend(
  DC: HDC;                  {目标设备环境句柄}
  p2, p3, p4, p5: Integer;  {目标位置与宽高}
  DC6: HDC;                 {源设备环境句柄}
  p7, p8, p9, p10: Integer; {源位置与宽高}
  p11: TBlendFunction       {合成方式的数据结构, 见下表}
): BOOL;

//TBlendFunction 结构是 _BLENDFUNCTION 的重命名:
_BLENDFUNCTION = packed record
  BlendOp: BYTE;             {本例使用了: AC_SRC_OVER = 0}
  BlendFlags: BYTE;          {必须为 0}
  SourceConstantAlpha: BYTE; {透明度: 0..255}
  AlphaFormat: BYTE;         {通常为 0,如果源位图为32位真彩色,可为 AC_SRC_ALPHA }
end;

 
 
 
 
 

 

 

  
本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  Bit,BitBack: TBitmap;
  Transparency: Byte = 255; {透明度}

procedure TForm1.FormCreate(Sender: TObject);
begin
  {设定窗体背景}
  BitBack := TBitmap.Create;
  BitBack.LoadFromFile('c:\temp\Back.bmp');
  Brush.Bitmap := BitBack;

  {调入图片}
  Bit := TBitmap.Create;
  Bit.LoadFromFile('c:\temp\test.bmp');

  {给 TrackBar1 初始化}
  TrackBar1.Max := 255;
  TrackBar1.Min := 0;
  TrackBar1.ShowSelRange := False;
  TrackBar1.Position := TrackBar1.Max;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  Blend: TBlendFunction; {定义 AlphaBlend 要使用的 TBlendFunction 结构}
begin
  {给 TBlendFunction 结构赋值}
  Blend.BlendOp := AC_SRC_OVER;
  Blend.BlendFlags := 0;
  Blend.AlphaFormat := 0;
  Blend.SourceConstantAlpha := Transparency;

  Windows.AlphaBlend(Canvas.Handle, {因 VCL 有同名属性, 所以指定了是来自 Windows 单元}
                     10,
                     10,
                     Bit.Width + 10,
                     Bit.Height + 10,
                     Bit.Canvas.Handle,
                     0,
                     0,
                     Bit.Width,
                     Bit.Height,
                     Blend
                     );
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  Transparency := TrackBar1.Position;
  Text := IntToStr(Transparency);
  Self.Repaint; {命令重绘}
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Bit.Free;
  BitBack.Free;
end;

end.

 
 
 
 
 

 

 

  
窗体设计:
object Form1: TForm1
  Left = 352
  Top = 238
  Caption = 'Form1'
  ClientHeight = 209
  ClientWidth = 211
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesigned
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object TrackBar1: TTrackBar
    Left = 0
    Top = 186
    Width = 201
    Height = 24
    TabOrder = 0
    OnChange = TrackBar1Change
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/05/19/1202729.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
RGBA alpha 透明度混合算法

Alpha 透明度混合算法,在网上查找了一下,主要有以下三种: 一、 R1,G1,B1,Alpha1 为前景颜色值,R2,G2,B2,Alpha2 为背景颜色值,则 前景色 R = R1 Alpha1 + R2 Alpha2 * (1-Alpha1) ; ...

rouway
2013/11/30
0
0
【Visual C++】游戏开发笔记十四 游戏画面绘图(四) 华丽的CImage类

本系列文章由zhmxy555编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7422922 作者:毛星云 邮箱: happylifemxy@qq.com 欢迎邮件交流编程心得 我们知道,Visual C+...

长平狐
2012/11/12
235
0
ERROR: function @ Ordinal 1883 missing !!! Please Check your SYSGEN variable !!!

ERROR: function @ Ordinal xxx missing 今天新定制了一个OS,测试以前的应用程序,程序无法运行,查看串口信息有如下错误提示: ERROR: function @ Ordinal 1883 missing !!! Please Check ...

william_nw
06/26
0
0
CSS 图像透明/不透明

使用CSS很容易创建透明的图像。 注意:CSS Opacity属性是W3C的CSS3建议的一部分。 更多实例 创建透明图像 - 悬停效果 创建一个具有文本的拥有背景图像的透明框 实例1 - 创建一个透明图像 CS...

wybo521
2016/01/21
6
0
GDI+图像处理学习笔记——改变图像的透明度

GDI+是WindowsXp和windows Server 2003中的一个子系统,主要用于处理系统的绘制消息。GDI+是GDI的扩展,其继承了GDI的有点并在其基础上进行了改进,包括增加了一些GDI无法绘制的图形函数,同...

晨曦之光
2012/05/23
500
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 11 已发布,String 还能这样玩!

在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。 Java 11 增加...

Java技术栈
26分钟前
2
0
什么是以太坊DAO?(二)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 在上一节中,我们为了展示什么是DAO创建了一个合约,就像一个采用邀请制的俱乐部,会...

geek12345
41分钟前
4
0
全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
55分钟前
4
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
55分钟前
3
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
59分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部