刷,顾名思义,它是一样的刷。提请设备,还记得常唱歌曲,"我是一个画家.." 好吧。跑题了。

本系列博客希望尽可能简单的描写叙述每项功能,而不希望把每一个參数都介绍的详具体细,假设须要。请查阅msdn,本节讲述的渐变画刷,主要有两种。一种是叫线性画刷(LinearGradientBrush),另一种叫路径画刷(PathGradientBrush),我希望以一种尽可能简单的方式去描写叙述它。但能力有限,所以有什么意见,希望各位能帮忙提出,谢谢。

(一)使用画刷

上一节中。我们实际上实现了上中下三个面。然后全部的内容都会绘制上一种颜色或者一张图片。而绘制颜色事实上本质上就是一种特殊的画刷,而这里我们将使用更高级的画刷--渐变的画刷来代替它们。

因此。我们本节的工作,就是要代替上一节中graphics.clear()的工作。其它的与上节内容没有不论什么差别。

(二)线性画刷

我们须要初始化一个线性画刷,代码例如以下:

		LinearGradientBrush *lgb = new LinearGradientBrush(Point(0,0), Point(100,0),
Color::Blue, Color::Green);

简单说明一下參数。前两个參数,是两个点,这两个点组成了方向向量,唯一标记了渐进的方向。

后面两个參数,是两个颜色。指的是開始和结束的两个点的颜色。假设我们希望中间添加几组呢?我们能够设置插值,详细能够查阅GDI+的API函数:SetInterpolationColors。

然后,我们填充一下Graphics就能够了,代码例如以下:

bmpGraphics.FillRectangle(lgb, 0, 0, 100, 100);

ok,看看效果:

(三)路径画刷

相对照线性画刷,路径画刷就略微复杂一点。它相同是一种渐进变化的画刷,但它是从一个闭合路径的中心点向路径中渐变的一种画刷。

闭合路径的中心点默认是路径的几何中心,当然我们也能够通过SetCenterPoint来进行中心点的设置。

既然如此,那么我们首先须要定义一个闭合路径。这里我们定义一个正方形

		GraphicsPath *gp = new GraphicsPath;
Point p[] = {
Point(0,0),Point(100,0),Point(100,100),Point(0,100)
};
gp->AddLines(p, 4);

然后,用这个正方形为路径渐进画刷初始化

		PathGradientBrush *pgb = new PathGradientBrush(gp);

这之后,我们还须要设置中心的颜色和四周的颜色。

		pgb->SetCenterColor(Color::White);

		Color surroundColors[] = {
Color::Red,
Color::Green,
Color::Blue,
Color::Yellow
};
int nCount = 4;
pgb->SetSurroundColors(surroundColors, &nCount);

最后,填充路径

bmpGraphics.FillPath(pgb, gp);

至此,我们就完毕了渐进画刷的绘制,仅仅须要依照上节的内容。将其会知道hdc相应的graphics中就可以。看看效果:

(四)在正方体上使用渐进画刷

仅仅须要将上述内容会知道正方体上的三个面就可以,直接看看效果吧:

(五)其它说明

有非常多细节的操作。还须要详细使用中多多尝试,才干更熟练的使用。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

GDI+学习笔记(六)渐变画笔的更多相关文章

  1. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  2. Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  3. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  5. Go语言学习笔记六: 循环语句

    Go语言学习笔记六: 循环语句 今天学了一个格式化代码的命令:gofmt -w chapter6.go for循环 for循环有3种形式: for init; condition; increment ...

  6. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  7. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  8. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  9. Spring Boot 学习笔记(六) 整合 RESTful 参数传递

    Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...

  10. Redis学习笔记六:持久化实验(AOF,RDB)

    作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...

随机推荐

  1. 关于多线程的一个例子(UI实时显示)

    在开发Window应用程序的时候,经常需要在界面上显示出已经执行到什么步骤了,拿一个简单例子来说,创建一个Winform程序,在窗体上访一个Button和一个Label,点击Button时做100次循 ...

  2. 期望dp专题

    一直不明白为什么概率是正推,期望是逆推. 现在题目做多了,慢慢好像有点明白了 poj2096 收集bug,  有n个种类的bug,和s个子系统.  每找到一个bug需要一天. 要我我们求找到n个种类的 ...

  3. jquery动态加入删除一行数据

    <html> <head> <title>加入.删除一行</title> <meta http-equiv="content-type& ...

  4. Androidclient和server第一种方法端数据交换

    网上有一个非常不同的情况来证明Android客户端和server如何结束的数据,但这些实施例大多相互作用更复杂,对于那些谁刚开始学习它是有害的,现在介绍一些简单的代码.逻辑清晰的互动样本,首先介绍本博 ...

  5. SQL Server提高并发查询效率

    同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...

  6. iOS 在TabViewController中的一个ViewController跳转到另一种ViewController

    第一步: #import "AppDelegate.h" 步骤二: 在须要跳转的地方: AppDelegate *appDelegate = (AppDelegate *)[[UI ...

  7. linux下安装oracle11g 64位最简客户端(转)

    安装环境 Linux服务器:SuSe11 sp1 64位           Oracle客户端:Oracle11gR2 64位(最简客户端) 部署流程 1.准备工作,首先在oracle官网下载最新的 ...

  8. c# 获取某个对象的[公有属性]的名称,类型,值

    /// <summary> /// 获取某个对象的[公有属性]的名称,类型,值 /// </summary> /// <typeparam name="T&qu ...

  9. BootStrap布局案例

    BootStrap布局 bootstrap 2.3版与3.0版的使用区别 http://www.weste.net/2013/8-20/93261.html 以一个博客系统的首页,来介绍如何布局 1, ...

  10. Spring3.2 HelloWorld

    直接上图吧: jar包: 项目文件夹一览: 这里的HelloWeb-servlet,xml 是在WEB-INF 下 HelloController: package com.cqu.tutorial; ...