SkBitmap  bmp;
bmp.setConfig(SkBitmap::kARGB_8888_Config, rect.Width(), rect.Height());
bmp.allocPixels();
SkCanvas canvas(bmp);
SkPaint paint;
SkRect rect;
SkPaint::Style oldStyle; //画矩形
// rect.setXYWH(100, 100, 200, 200);
// paint.setColor(SK_ColorRED);
// paint.setStrokeWidth(1);
// oldStyle = paint.getStyle();
// //kStroke_Style,画边框
// //kFill_Style,填充
// paint.setStyle(SkPaint::kStroke_Style);
// canvas.drawRect(rect, paint);
// paint.setStyle(oldStyle); //画线
// paint.setStrokeWidth(1);
// paint.setColor(SK_ColorBLACK);
// paint.setAntiAlias(true);//抗锯齿
// canvas.drawLine(0, 0, 300, 100, paint); //画贝塞尔曲线
// SkPath path;
// SkPoint pt[4];
//
// pt[0].set(100, 100);
// pt[1].set(200, 80);
// pt[2].set(300, 80);
// pt[3].set(400, 100);
// path.moveTo(pt[0]);
// //二次贝塞尔曲线
// //path.quadTo(pt1, pt2);
// //三次贝塞尔曲线
// path.cubicTo(pt[1], pt[2], pt[3]);
// paint.setAntiAlias(true);//抗锯齿
// paint.setStyle(SkPaint::kStroke_Style);
// paint.setStrokeWidth(1);
// paint.setColor(SK_ColorBLACK);
// canvas.drawPath(path, paint);
// //贝塞尔点
// paint.setColor(SK_ColorRED);
// canvas.drawCircle(pt[0].x(), pt[0].y(), 4, paint);
// canvas.drawCircle(pt[1].x(), pt[1].y(), 4, paint);
// canvas.drawCircle(pt[2].x(), pt[2].y(), 4, paint);
// canvas.drawCircle(pt[3].x(), pt[3].y(), 4, paint); //画椭圆
// rect.setXYWH(100, 100, 300, 200);
// paint.setColor(SK_ColorBLUE);
// paint.setStyle(SkPaint::kFill_Style);//填充
// paint.setAntiAlias(true);//抗锯齿
// canvas.drawOval(rect, paint); //渐变
// SkPoint pts[2] = {100, 0, 400, 0};
// SkColor colors[3] = {SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE};//渐变颜色
// SkScalar pos[3] = {0, 0.2, 1.0};//颜色过渡率
// int count = SK_ARRAY_COUNT(colors);
// SkShader* shader = SkGradientShader::CreateLinear(pts,
// colors,
// pos,
// count,
// SkShader::kMirror_TileMode);
// //shader对象控制权交给paint
// paint.setShader(shader);
// shader->unref();
// rect.setXYWH(100, 100, 300, 200);
// canvas.drawRect(rect, paint);
// paint.setShader(NULL);//释放shader //画点集合
// SkPoint pts[] = {{100, 100},
// {200, 100},
// {200, 200},
// {100, 200}};
// int count = SK_ARRAY_COUNT(pts);
// SkCanvas::PointMode mode = SkCanvas::kPolygon_PointMode;
// paint.setColor(SK_ColorBLUE);
// paint.setStrokeWidth(1);
// canvas.drawPoints(mode,
// count,
// pts,
// paint); //画路径
// SkPath path;
//
// path.addRect(0, 0, 100, 100);
// path.addCircle(100, 100, 50);
// paint.setColor(SK_ColorRED);
// //kStroke_Style,路径轮廓,
// //kFill_Style,填充模式
// paint.setStyle(SkPaint::kStroke_Style);
// canvas.drawPath(path, paint); //画文字
// wstring text = L"hello Skia!";
// paint.setColor(SK_ColorRED);
// paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);//UNICODE编码
// paint.setTextSize(30);
// paint.setAntiAlias(true);//抗锯齿
// paint.setStyle(SkPaint::kFill_Style);
// canvas.drawText(text.c_str(), text.length() * 2, 100, 100, paint);//(100, 100)左下点坐标
// //得到绘画文字的高度和宽度
// SkScalar width = paint.measureText(text.c_str(), text.length() * 2);
// SkScalar height = paint.getTextSize();
// rect.setXYWH(100, 100, width, height);
// paint.setStyle(SkPaint::kStroke_Style);
// canvas.drawRect(rect, paint);
// paint.setStyle(SkPaint::kFill_Style); //文字旋转
// wstring text = L"123456";
// SkPath path;
// SkPoint pts[2];
// pts[0].set(200, 200);
// pts[1].set(200, 100);
// path.addPoly(pts, 2, false);
// paint.setStyle(SkPaint::kStroke_Style);//轮廓
// paint.setColor(SK_ColorRED);
// canvas.drawPath(path, paint);//画路径
// paint.setAntiAlias(true);//平滑
// paint.setStyle(SkPaint::kFill_Style);//填充
// paint.setTextSize(20);
// paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);//UNICODE编码
// paint.setColor(SK_ColorBLACK);
// canvas.drawTextOnPath(text.c_str(), text.size() * 2, path, NULL, paint);//画竖直文字 //路径
// SkPath path[2];
// SkPoint pts[4];
// SkMatrix mx;
//
// pts[0].set(50, 50);
// pts[1].set(75, 25);
// pts[2].set(125, 25);
// pts[3].set(150, 50);
// path[0].addPoly(pts, 4, true);
// mx.reset();
// mx.setTranslateX(100);//X坐标平移100
// path[1].addPoly(pts, 4, true);
// path[0].addPath(path[1], mx);//添加新路径
// canvas.drawPath(path[0], paint); //设置剪切区
// SkPath pa[2];
// SkPoint pts[4];
//
// pts[0].set(100, 100);
// pts[1].set(200, 100);
// pts[2].set(200, 200);
// pts[3].set(100, 200);
// pa[0].addPoly(pts, 4, true);
// pts[0].set(150, 125);
// pts[1].set(250, 125);
// pts[2].set(250, 175);
// pts[3].set(150, 175);
// pa[1].addPoly(pts, 4, true);
//
// paint.setColor(SK_ColorBLUE);
// canvas.save(SkCanvas::kClip_SaveFlag);//保存剪切区
// canvas.clipPath(pa[0], SkRegion::kReplace_Op);
// canvas.clipPath(pa[1], SkRegion::kXOR_Op);
// canvas.drawPath(pa[0], paint);
// canvas.drawPath(pa[1], paint);
// canvas.restore();//还原剪切区 //绕中心点旋转矩形
// SkPoint ptCenter; // paint.setAntiAlias(true);
// paint.setStyle(SkPaint::kStroke_Style);
// paint.setColor(SK_ColorBLACK);
// paint.setStrokeWidth(1.0f); // rect.setXYWH(50, 50, 100, 50);
// ptCenter.fX = rect.centerX();
// ptCenter.fY = rect.centerY(); // canvas.save(SkCanvas::kMatrix_SaveFlag);
// canvas.translate(ptCenter.fX, ptCenter.fY);//平移坐标系到矩形中心点
// canvas.rotate(30.0f);
// rect.offset(-ptCenter.fX, -ptCenter.fY);//将矩形中心点平移到原点(0,0)
// canvas.drawRect(rect, paint);//绘画旋转后的矩形
// canvas.restore(); // rect.offset(ptCenter.fX, ptCenter.fY);
// paint.setColor(SK_ColorRED);
// 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. 最短路径Shortest Path algorithm

    最短路径问题: 如果从图中某一顶点(称为端点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边上的权值总和达到最小. (1)Dijkstra 算法 (2) Floyd 算 ...

  2. 28.按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。 (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性, 和计算体积的方法。 (3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、 宽、高,输出其底面积和体积。

    //矩形父类 package d922A; public class Rect { private double l,w; Rect(double c,double k) { l=c; w=k; } ...

  3. mahout与nosql的两幅经典图形

  4. C语言介绍

    以下东东转自百度百科 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔实验室的Dennis M. Ritchie于1972年推出,1978年后,C语言已先后被 ...

  5. python 字典排序,列表排序详细

    在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按“键”排序和按“值”排序. 1.按“值 ...

  6. ShellExecute, WinExec, CreateProcess区别

    ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 有几个API函数都可以实现这些功能 ...

  7. mysql命令行操作 添加字段,修改字段

    alter table  t_apply   change column     remarks(原)    apply_remarks(目标)   varchar(100) default '' c ...

  8. swf version 与flash player 对应关系

    2013-04-16更新:更新Flash Player 11.7/AIR 3.7正式版. 详细链接FlashPlayer 11.7详情 2013-03-10更新:更新Flash Player 11.6 ...

  9. 我的C笔记

    最近更新: 1,父进程fork一个子进程,当向父进程发送一个SIGINT或其它信号时,子进程是否会接受到该信号? 2,父进程调用system执行一个程序时,向父进程发送一个信号时,system运行中的 ...

  10. dfs.replication 参数 动态修改

    首先 dfs.replication这个参数是个client参数,即node level参数.需要在每台datanode上设置.其实默认为3个副本已经够用了,设置太多也没什么用. 一个文件,上传到hd ...