1. SkBitmap bmp;
  2. bmp.setConfig(SkBitmap::kARGB_8888_Config, rect.Width(), rect.Height());
  3. bmp.allocPixels();
  4. SkCanvas canvas(bmp);
  5. SkPaint paint;
  6. SkRect rect;
  7. SkPaint::Style oldStyle;
  8.  
  9. //画矩形
  10. // rect.setXYWH(100, 100, 200, 200);
  11. // paint.setColor(SK_ColorRED);
  12. // paint.setStrokeWidth(1);
  13. // oldStyle = paint.getStyle();
  14. // //kStroke_Style,画边框
  15. // //kFill_Style,填充
  16. // paint.setStyle(SkPaint::kStroke_Style);
  17. // canvas.drawRect(rect, paint);
  18. // paint.setStyle(oldStyle);
  19.  
  20. //画线
  21. // paint.setStrokeWidth(1);
  22. // paint.setColor(SK_ColorBLACK);
  23. // paint.setAntiAlias(true);//抗锯齿
  24. // canvas.drawLine(0, 0, 300, 100, paint);
  25.  
  26. //画贝塞尔曲线
  27. // SkPath path;
  28. // SkPoint pt[4];
  29. //
  30. // pt[0].set(100, 100);
  31. // pt[1].set(200, 80);
  32. // pt[2].set(300, 80);
  33. // pt[3].set(400, 100);
  34. // path.moveTo(pt[0]);
  35. // //二次贝塞尔曲线
  36. // //path.quadTo(pt1, pt2);
  37. // //三次贝塞尔曲线
  38. // path.cubicTo(pt[1], pt[2], pt[3]);
  39. // paint.setAntiAlias(true);//抗锯齿
  40. // paint.setStyle(SkPaint::kStroke_Style);
  41. // paint.setStrokeWidth(1);
  42. // paint.setColor(SK_ColorBLACK);
  43. // canvas.drawPath(path, paint);
  44. // //贝塞尔点
  45. // paint.setColor(SK_ColorRED);
  46. // canvas.drawCircle(pt[0].x(), pt[0].y(), 4, paint);
  47. // canvas.drawCircle(pt[1].x(), pt[1].y(), 4, paint);
  48. // canvas.drawCircle(pt[2].x(), pt[2].y(), 4, paint);
  49. // canvas.drawCircle(pt[3].x(), pt[3].y(), 4, paint);
  50.  
  51. //画椭圆
  52. // rect.setXYWH(100, 100, 300, 200);
  53. // paint.setColor(SK_ColorBLUE);
  54. // paint.setStyle(SkPaint::kFill_Style);//填充
  55. // paint.setAntiAlias(true);//抗锯齿
  56. // canvas.drawOval(rect, paint);
  57.  
  58. //渐变
  59. // SkPoint pts[2] = {100, 0, 400, 0};
  60. // SkColor colors[3] = {SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE};//渐变颜色
  61. // SkScalar pos[3] = {0, 0.2, 1.0};//颜色过渡率
  62. // int count = SK_ARRAY_COUNT(colors);
  63. // SkShader* shader = SkGradientShader::CreateLinear(pts,
  64. // colors,
  65. // pos,
  66. // count,
  67. // SkShader::kMirror_TileMode);
  68. // //shader对象控制权交给paint
  69. // paint.setShader(shader);
  70. // shader->unref();
  71. // rect.setXYWH(100, 100, 300, 200);
  72. // canvas.drawRect(rect, paint);
  73. // paint.setShader(NULL);//释放shader
  74.  
  75. //画点集合
  76. // SkPoint pts[] = {{100, 100},
  77. // {200, 100},
  78. // {200, 200},
  79. // {100, 200}};
  80. // int count = SK_ARRAY_COUNT(pts);
  81. // SkCanvas::PointMode mode = SkCanvas::kPolygon_PointMode;
  82. // paint.setColor(SK_ColorBLUE);
  83. // paint.setStrokeWidth(1);
  84. // canvas.drawPoints(mode,
  85. // count,
  86. // pts,
  87. // paint);
  88.  
  89. //画路径
  90. // SkPath path;
  91. //
  92. // path.addRect(0, 0, 100, 100);
  93. // path.addCircle(100, 100, 50);
  94. // paint.setColor(SK_ColorRED);
  95. // //kStroke_Style,路径轮廓,
  96. // //kFill_Style,填充模式
  97. // paint.setStyle(SkPaint::kStroke_Style);
  98. // canvas.drawPath(path, paint);
  99.  
  100. //画文字
  101. // wstring text = L"hello Skia!";
  102. // paint.setColor(SK_ColorRED);
  103. // paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);//UNICODE编码
  104. // paint.setTextSize(30);
  105. // paint.setAntiAlias(true);//抗锯齿
  106. // paint.setStyle(SkPaint::kFill_Style);
  107. // canvas.drawText(text.c_str(), text.length() * 2, 100, 100, paint);//(100, 100)左下点坐标
  108. // //得到绘画文字的高度和宽度
  109. // SkScalar width = paint.measureText(text.c_str(), text.length() * 2);
  110. // SkScalar height = paint.getTextSize();
  111. // rect.setXYWH(100, 100, width, height);
  112. // paint.setStyle(SkPaint::kStroke_Style);
  113. // canvas.drawRect(rect, paint);
  114. // paint.setStyle(SkPaint::kFill_Style);
  115.  
  116. //文字旋转
  117. // wstring text = L"123456";
  118. // SkPath path;
  119. // SkPoint pts[2];
  120. // pts[0].set(200, 200);
  121. // pts[1].set(200, 100);
  122. // path.addPoly(pts, 2, false);
  123. // paint.setStyle(SkPaint::kStroke_Style);//轮廓
  124. // paint.setColor(SK_ColorRED);
  125. // canvas.drawPath(path, paint);//画路径
  126. // paint.setAntiAlias(true);//平滑
  127. // paint.setStyle(SkPaint::kFill_Style);//填充
  128. // paint.setTextSize(20);
  129. // paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);//UNICODE编码
  130. // paint.setColor(SK_ColorBLACK);
  131. // canvas.drawTextOnPath(text.c_str(), text.size() * 2, path, NULL, paint);//画竖直文字
  132.  
  133. //路径
  134. // SkPath path[2];
  135. // SkPoint pts[4];
  136. // SkMatrix mx;
  137. //
  138. // pts[0].set(50, 50);
  139. // pts[1].set(75, 25);
  140. // pts[2].set(125, 25);
  141. // pts[3].set(150, 50);
  142. // path[0].addPoly(pts, 4, true);
  143. // mx.reset();
  144. // mx.setTranslateX(100);//X坐标平移100
  145. // path[1].addPoly(pts, 4, true);
  146. // path[0].addPath(path[1], mx);//添加新路径
  147. // canvas.drawPath(path[0], paint);
  148.  
  149. //设置剪切区
  150. // SkPath pa[2];
  151. // SkPoint pts[4];
  152. //
  153. // pts[0].set(100, 100);
  154. // pts[1].set(200, 100);
  155. // pts[2].set(200, 200);
  156. // pts[3].set(100, 200);
  157. // pa[0].addPoly(pts, 4, true);
  158. // pts[0].set(150, 125);
  159. // pts[1].set(250, 125);
  160. // pts[2].set(250, 175);
  161. // pts[3].set(150, 175);
  162. // pa[1].addPoly(pts, 4, true);
  163. //
  164. // paint.setColor(SK_ColorBLUE);
  165. // canvas.save(SkCanvas::kClip_SaveFlag);//保存剪切区
  166. // canvas.clipPath(pa[0], SkRegion::kReplace_Op);
  167. // canvas.clipPath(pa[1], SkRegion::kXOR_Op);
  168. // canvas.drawPath(pa[0], paint);
  169. // canvas.drawPath(pa[1], paint);
  170. // canvas.restore();//还原剪切区
  171.  
  172. //绕中心点旋转矩形
  173. // SkPoint ptCenter;
  174.  
  175. // paint.setAntiAlias(true);
  176. // paint.setStyle(SkPaint::kStroke_Style);
  177. // paint.setColor(SK_ColorBLACK);
  178. // paint.setStrokeWidth(1.0f);
  179.  
  180. // rect.setXYWH(50, 50, 100, 50);
  181. // ptCenter.fX = rect.centerX();
  182. // ptCenter.fY = rect.centerY();
  183.  
  184. // canvas.save(SkCanvas::kMatrix_SaveFlag);
  185. // canvas.translate(ptCenter.fX, ptCenter.fY);//平移坐标系到矩形中心点
  186. // canvas.rotate(30.0f);
  187. // rect.offset(-ptCenter.fX, -ptCenter.fY);//将矩形中心点平移到原点(0,0)
  188. // canvas.drawRect(rect, paint);//绘画旋转后的矩形
  189. // canvas.restore();
  190.  
  191. // rect.offset(ptCenter.fX, ptCenter.fY);
  192. // paint.setColor(SK_ColorRED);
  193. // canvas.drawRect(rect, paint);

skia入门的更多相关文章

  1. dotnet 控制台 使用 Microsoft.Maui.Graphics 配合 Skia 进行绘图入门

    本文将告诉大家如何在 dotnet 的控制台模式下,采用 MAUI 自绘库 Microsoft.Maui.Graphics 进行绘图,设置 Microsoft.Maui.Graphics 底层调用 M ...

  2. Flutter基础系列之入门(一)

    1.Flutter是什么? 官方介绍:Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter ...

  3. Flutter入门教程(一)Flutter简介

    这是Flutter系列第一篇文章,后续会持续更新Flutter相关知识,本篇就主要对于Flutter技术做一个简单的入门介绍 一.Flutter简介 Flutter是谷歌的移动UI框架,可以快速在iO ...

  4. 写给前端的 react-native 入门指南

    前言 本文主要介绍 react-native(下称 RN) 的入门, 和前端的异同点 文章不涉及功能的具体实现 选择优势 我们先说说, 为什么很多人会选择使用 RN .他对应的特性和普通 Web 的区 ...

  5. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  8. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  9. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

随机推荐

  1. CentOS 修改主机名

    最新文章:Virson's Blog 1.临时修改主机名 地址:http://www.cnblogs.com/mawanglin2008/p/3530790.html 显示主机名: oracle@lo ...

  2. JQuery 阻止事件冒泡

    JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){  ...

  3. 将json文件转换为字符串

    //从给定位置读取Json文件    public   String readJson(String path){        //从给定位置获取文件        File file = new ...

  4. 让ECSHOP模板支持转smarty时间戳

    找到includes/cls_template.php 在大约640行,加入: case 'time': $p = 'date("Y-m-d H:i:s",' . $p . ')' ...

  5. 微信账号 echo_server 的实现

    <?php/** 微信账号 echo_server 的实现*//** 定义 echo_server 的 TOKEN 为 echo_server*/define("TOKEN" ...

  6. 美化type="file"控件

    对于type="file"而言是一个不大好看的控件.如果不美化他一下,总感觉自己的网站有些缺乏了美感 上代码: <!DOCTYPE html> <html> ...

  7. 一些常见warning的原因和解决方法

    在入职三周后,终于赶齐了接手项目落下两个月的项目,有了一些自己的空闲时间对项目进行整理.主要整理包括类目的整合,从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目,井然有序 ...

  8. websphere安装验证报错 忘记密码的配置

    http://blog.csdn.net/yulimin/article/details/4048897 ADMU7704E: 在尝试启动与服务器相关联的 Windows 服务时失败:server1: ...

  9. ios图片剪切

    #import "ViewController.h" @interface ViewController ()@property (weak, nonatomic) IBOutle ...

  10. Golang: pprof

    压测的时候,如果在应用包里加入runtime包,会对压测产生非常严重的干扰. 测试1:开启runtime包 [luwenwei@test-weishi01v ~]$ siege -c --time=1 ...