函数声明:

在class SK_API SkGradientShader 中。(include\effects\SkGradientShader.h)

    /** Returns a shader that generates a linear gradient between the twospecified points.<p />CreateLinear returns a shader with a reference count of 1.The caller should decrement the shader's reference count when done with the shader.It is an error for count to be < 2.@param  pts The start and end points for the gradient.@param  colors  The array[count] of colors, to be distributed between the two points@param  pos     May be NULL. array[count] of SkScalars, or NULL, of the relative position ofeach corresponding color in the colors array. If this is NULL,the the colors are distributed evenly between the start and end point.If this is not null, the values must begin with 0, end with 1.0, andintermediate values must be strictly increasing.@param  count   Must be >=2. The number of colors (and pos if not NULL) entries. @param  mode    The tiling mode@param  mapper  May be NULL. Callback to modify the spread of the colors.*/static SkShader* CreateLinear(  const SkPoint pts[2],const SkColor colors[], const SkScalar pos[], int count,SkShader::TileMode mode,SkUnitMapper* mapper = NULL);

  SkPoint pts[2]; 起始点和结束点,影响了Gradient的起始位置和过渡完 count个颜色需要的像素。

  SkColor colors[] 过渡的颜色表

  SkScalar pos[] 过渡色百分比,必须以0开始,以1.0结束,中间值严格增长

  int count   过渡的颜色数

  SkShader::TileMode mode 绘制范围大于 pts的两个点指定的距离时的重复模式

  SkUnitMapper *mapper ;

  举例一:

  pts 分别为 [0,0]、[50,50], 画 区域SkRect(0,0,100,100),重复模式kMirror_TileMode,颜色表用红绿蓝白黑

  则Gradient过渡完颜色表的颜色时,需要从点(0,0)到点(50,50),Gradient方向是斜向右下45°

  范围(0,0,100,100)超出范围,重复模式是kMirror_TileMode,镜像重复

  本来是红绿蓝白黑 超出部分挨着就是  黑白蓝绿红 再次 红绿蓝白黑 ……

  

   如果画图的范围小于 (0,0,50,50),就按比例裁剪

  画到(0,0,50,50)是: 画到(0,0,20,50)则是:

  举例二:

  如果pts 起始点不是(0,0),比如(x,y),如果在(x,y)左侧有绘制Gradient,则按照 mode模式重复。

  pts(50,50),(100,50),方向是从左到右,重复模式kMirror_TileMode,颜色表用红绿蓝白黑

  画(0,0,100,100)是从左到右过渡,从起始点的x坐标开始往右50像素是红绿蓝白黑的过渡,

             从起始点的x坐标(50)开始往左,是右边的kMirror_TileMode模式的重复:从坐标50往左是 红绿蓝白黑。

  举例三:

  参数count ,如果小于colors的元素个数,则只取colors的前count个颜色,如果大于,则填充了透明色

  (但是如果count比colors的元素个数多了超过1,比如大3,就填充3个空颜色,但是空颜色之间的过渡有颜色)

  pts (50,50),(100,50);画范围SkRect r = {0,0,SkIntToScalar(200),SkIntToScalar(100)};

  如:SkColor colors[] ={SK_ColorRED,SK_ColorGREEN,SK_ColorBLUE,SK_ColorWHITE,SK_ColorBLACK};

  //红、绿、蓝、白、黑,这些宏的alpha值都是FF,即不透明

  count = SK_ARRAY_COUNT(colors);//5

 ,count =  2:,count =8:

  

举例四:

  三种mode的效果图

  

例四代码:

//画到屏幕上
void Flip()
{HDC dc = GetDC(g_hWnd);SetDIBitsToDevice(dc, 0, 0, 800, 480, 0, 0, 0, 800, pskBitmap->getPixels(), lpbmi, DIB_RGB_COLORS);ReleaseDC(g_hWnd,dc);
}void PaintShader()
{SkPaint paint;paint.setAntiAlias(true);//paint.setStyle(SkPaint::kStroke_Style);//paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3)));//paint.setStyle(SkPaint::kFill_Style);SkPoint p = SkPoint::Make(50,50);SkPoint q = SkPoint::Make(100,50);SkPoint pts[] ={p,q};SkScalar t,temp,x,y;SkColor colors[] ={SK_ColorRED,SK_ColorGREEN,SK_ColorBLUE,SK_ColorWHITE,SK_ColorBLACK};//红、绿、蓝、白、黑,这些宏的alpha值都是FF,即不透明SkShader *shader ;shader =SkGradientShader::CreateLinear(pts,colors,NULL,SK_ARRAY_COUNT(colors),SkShader::kMirror_TileMode);//pts决定Gradient的起始点和走向,以及过渡完gClors的颜色需要的像素距离paint.setShader(shader);shader->unref();SkRect r = {0,0,SkIntToScalar(200),SkIntToScalar(100)};// 如果r范围小于pts,则只显示完整过渡colors需要像素的一部分,如果大于就会按mode重复//kMirror_TileMode就是红绿蓝白黑+白蓝绿红+绿蓝白黑+白...重复pskCanvas->drawRect(r,paint);shader =SkGradientShader::CreateLinear(pts,colors,NULL,SK_ARRAY_COUNT(colors),SkShader::kRepeat_TileMode);paint.setShader(shader);shader->ref();r.setLTRB(0,SkIntToScalar(110),SkIntToScalar(200),SkIntToScalar(210));pskCanvas->drawRect(r,paint);shader =SkGradientShader::CreateLinear(pts,colors,NULL,SK_ARRAY_COUNT(colors),SkShader::kClamp_TileMode);paint.setShader(shader);shader->ref();r.setLTRB(0,SkIntToScalar(220),SkIntToScalar(200),SkIntToScalar(320));pskCanvas->drawRect(r,paint);}void MyLButtonDown(POINT pt)
{PaintShader();Flip();}

  举例五:

  关于constSkScalar pos[]参数,以0开始,以1.0结束,中间值严格增长。

  我个人理解:constSkColor colors[]中两个颜色的过渡所占百分比为pos[]中对应两个值的差值

  SkColor colors[] ={SK_ColorRED,SK_ColorGREEN,SK_ColorBLUE,SK_ColorWHITE,SK_ColorBLACK};
  SkScalar scalars[] ={0.0, 0.2, 0.2, 0.3,1.0};

  //红绿过渡占20%,绿蓝没有过渡,蓝白过渡占10%,白黑过渡70%(对应值的差)

  

 SkPoint p = SkPoint::Make(0,50);SkPoint q = SkPoint::Make(800,50);SkPoint pts[] ={p,q};SkColor colors[] ={SK_ColorRED,SK_ColorGREEN,SK_ColorBLUE,SK_ColorWHITE,SK_ColorBLACK};SkScalar scalars[] ={0.0, 0.2, 0.2, 0.3,1.0};//红绿过渡占20%,绿蓝没有过渡,蓝白过渡占10%,白黑过渡70%(对应值的差)SkShader *shader ;shader =SkGradientShader::CreateLinear(pts,colors,scalars,SK_ARRAY_COUNT(colors),SkShader::kMirror_TileMode);//pts决定Gradient的起始点和走向,以及过渡完gClors的颜色需要的像素距离paint.setShader(shader);shader->unref();SkRect r = {0,0,SkIntToScalar(800),SkIntToScalar(100)};

  pts差值800,就是过渡完5个颜色要800像素, 画宽带为800像素的矩形

  红绿颜色过渡占0.2(0.2-0),有160像素

  绿蓝过渡占0(0.2-0.2)   没有绿蓝过渡区

  蓝白过渡占0.1(0.3-0.2)  有80像素

  白黑过渡占0.7(1.0-0.3)  560像素

效果图:

ezhong的博客园:http://www.cnblogs.com/ezhong/

转载于:https://www.cnblogs.com/ezhong/archive/2011/11/24/2261856.html

SkGradientShader::CreateLinear 的参数。相关推荐

  1. [转]SkGradientShader::CreateLinear

    SkGradientShader::CreateLinear 的参数. 函数声明: 在class SK_API SkGradientShader 中.(include\effects\SkGradie ...

  2. 在Dockerfile中设置G1垃圾回收器参数

    在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...

  3. Java Calendar.add()方法的使用,参数含义。指定时间差。

    cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作. 第 ...

  4. java带参数的方法笔记_具有Java参数的方法的类声明

    类声明可以包含在Java中具有参数的方法.演示此过程的程序如下: 示例class Message { public void messagePrint(String msg) { System.out ...

  5. Gin 框架学习笔记(02)— 参数自动绑定到结构体

    参数绑定模型可以将请求体自动绑定到结构体中,目前支持绑定的请求类型有 JSON .XML .YAML 和标准表单 form数据 foo=bar&boo=baz 等.换句话说,只要定义好结构体, ...

  6. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  7. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

  8. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  9. Go 学习笔记(65)— Go 中函数参数是传值还是传引用

    Go 语言中,函数参数传递采用是值传递的方式.所谓"值传递",就是将实际参数在内存中的表示逐位拷贝到形式参数中.对于像整型.数组.结构体这类类型,它们的内存表示就是它们自身的数据内 ...

最新文章

  1. 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现
  2. 1009. 说反话 (20)
  3. [css] span与span之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
  4. Redlock原理简介和实现过程
  5. 图片作为背景并且是链接的写法(背景图片加链接)
  6. linux英文包安装教程视频,Linux源码包安装过程讲解
  7. 拓端tecdat|R语言优化交易系统:用平行坐标图可视化系统参数优化结果
  8. 创 业 项 目 计 划 书 样 本
  9. cad脚本合适_CAD脚本学习
  10. ios 获取芝麻信用分
  11. Linux下gunicorn用法
  12. (更新时间)2021年6月4日 商城高并发秒杀系统(.NET Core版) 30-lua文件封装加载和执行
  13. 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页
  14. 《Android深入透析》之Android事件分发机制
  15. 香港免费空间和美国免费空间需要实名认证吗?
  16. 直面春招!一口气拿了9家公司的offer,涨薪7K!
  17. 物联网设备数据是如何流转的:基于EMQX与TDengine的前后端分离项目实践
  18. 【react基础】7、react获取文本框的值
  19. 中等专业学校计算机专业建设,中职学校计算机专业建设思路.doc
  20. nodejs express 启动报错:Error: Cannot find module 'xxx'

热门文章

  1. OpenCV实现幻灯片模糊slides blur的实例(附完整代码)
  2. OpenCV直方图比较Histogram Comparison
  3. C语言BFS算法的实现(附完整源码)
  4. C++Jump Search跳转搜索的实现算法(附完整源码)
  5. 「Self-driving: Perception」多传感器融合之Camera、Lidar 雷达融合
  6. 06_特征选择,特征选择的原因,sklearn特征选择API
  7. Python爬虫项目,获取所有网站上的新闻,并保存到数据库中,解析html网页等(未完待续)
  8. Hive常用运算(关系运算)、逻辑运算与数学运算、数值运算、日期函数、条件函数、字符串函数
  9. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序
  10. boost标准库开发环境搭建boost标准库环境搭建以及简单案例介绍