文档章节

GdiPlus[13]: IGPLinearGradientBrush 之多色渐变

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 379
阅读 2
收藏 0

多色渐变需要: 一个 "颜色数组" 和一个 "位置数组" (0-1 之间的位置比例);

IGPLinearGradientBrush.InterpolationColors 属性对应一个 IGPColorBlend 对象, 此对象专门用于装载上面两个数组.

IGPColorBlend 的 Colors 和 Positions 两个属性分别对应这两个数组.

下面的三个示例的结果都是一样的.

测试效果图:



测试一, 使用开放数组参数构建 IGPColorBlend

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  C1 = $FF000000;
  C2 = $FFFF0000;
  C3 = $FFFFFF00;
  C4 = $FFFF0000;
  C5 = $FF000000;
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  ColorBlend := TGPColorBlend.Create([C1, C2, C3, C4, C5], [0, 0.25, 0.5, 0.75, 1]);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  

测试二, 使用静态数组参数构建 IGPColorBlend:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
  cs: array[0..4] of TGPColor;
  ps: array[0..4] of Single;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  cs[0] := $FF000000;
  cs[1] := $FFFF0000;
  cs[2] := $FFFFFF00;
  cs[3] := $FFFF0000;
  cs[4] := $FF000000;

  ps[0] := 0;
  ps[1] := 0.25;
  ps[2] := 0.5;
  ps[3] := 0.75;
  ps[4] := 1;

  ColorBlend := TGPColorBlend.Create(cs, ps);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  

测试三, 使用数组常量或动态数组参数构建 IGPColorBlend:

uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  ps: array[0..4] of Single = (0, 0.25, 0.5, 0.75, 1);
var
  Graphics: IGPGraphics;
  Rect: TGPRect;
  Brush: IGPLinearGradientBrush;
  ColorBlend: IGPColorBlend;
  cs: array of TGPColor;
begin
  Graphics := TGPGraphics.Create(Canvas.Handle);
  Rect.Initialize(ClientRect);
  Brush := TGPLinearGradientBrush.Create(Rect, 0, 0, 0);

  SetLength(cs, 5);
  cs[0] := $FF000000;
  cs[1] := $FFFF0000;
  cs[2] := $FFFFFF00;
  cs[3] := $FFFF0000;
  cs[4] := $FF000000;

  ColorBlend := TGPColorBlend.Create(cs, ps);
  Brush.InterpolationColors := ColorBlend;

  Graphics.FillRectangle(Brush, Rect);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  Repaint;
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/14/1624020.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
分享20个下拉菜单制作:包括HTML5,jQuery和CSS3(附源码)

下拉菜单是网上最常见到的效果之一,用鼠标轻轻一点或是移过去,就出现一个更加详细的内容!20个下拉菜单制作源码, 包括:(三级导航菜单):独具特色的导航菜单,包含CSS3渐变、多个子菜单和...

kouxunli1
2014/06/03
339
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
65
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
85
0
自定义控件三部曲之绘图篇(十九)——LinearGradient与闪动文字效果

前言:家和万事兴 相关文章: 《Android自定义控件三部曲文章索引》:http://blog.csdn.net/harvic880925/article/details/50995268 博主这段时间工作实在是太忙了,全天无尿点……博客一直没...

harvic880925
2016/08/29
0
0
在C++Builder中使用GDI+的流程

在C++Builder中使用GDI+的流程: 1、 GDI+主要是通过gdiplus.dll进行调用,而BCB没有直接提供与gdiplus.dll对应的静态链接库,所以需要我们自己建立。如果在自己的计算机没有找到文件gdiplus...

hack_tian
04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部