文档章节

WinAPI: AlphaBlend - 图像透明度

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 386
阅读 4
收藏 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
222
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
491
0
[翻译]PyCairo指南--透明度

透明度 在这份PyCairo指南的这个部分,我们将讨论透明度。我们将提供一些基本的定义和三个有趣的透明度的例子。 透明度是指透过一种材料能够看到事物的品质。理解透明度最简单的方法就是想象...

WolfCS
2013/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
32分钟前
0
0
利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
今天
1
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
今天
3
0
给MySQL授权远程访问

putty登录服务器; 登录MySQL: mysql -u root -p 新建远程用户: CREATE USER 'myusername' IDENTIFIED BY 'mypassword'; 授权: grant all on *.* to john@'101.102.103.104' identified by......

sweethome
今天
3
0
在t-io老巢造谣,不过有造谣的就会有反造谣的!

只发当事人的截图,不发表评论,以免有引导嫌疑 PS: 截图是由不同的人发过来的 本人已经不在此微信群 图3:有造谣的,就有反造谣的 图4是2018-09-23的t-io官方群的一个发言小统计,有助于让...

talent-tan
今天
104
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部