skia的图形绘制API和我们平时使用的各种平台的Canvas API几乎没什么区别.
看名字一般也就能知道具体是什么绘制操作了.
例子
#include "demo.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkFont.h"
#include "include/core/SkImage.h"
#include "utils/file_utils.h"
void drawDemo(){
SkBitmap bitmap;
bitmap.setInfo(SkImageInfo::MakeN32(640,640,kOpaque_SkAlphaType));
bitmap.allocPixels();
SkCanvas canvas(bitmap);
canvas.clear(SK_ColorWHITE);
SkPaint paint;
paint.setAntiAlias(true);
paint.setColor(SK_ColorBLUE);
canvas.drawLine(SkPoint::Make(0,0),SkPoint::Make(640,640),paint);
paint.setColor(SK_ColorBLACK);
paint.setStrokeWidth(20);
canvas.drawPoint(SkPoint::Make(320,320),paint);
paint.setStrokeWidth(2);
paint.setColor(SK_ColorRED);
paint.setStyle(SkPaint::Style::kStroke_Style);
canvas.drawCircle(320,320,32,paint);
canvas.drawCircle(SkPoint::Make(320,320),64,paint);
paint.setColor(SK_ColorRED);
canvas.drawRect(SkRect::MakeXYWH(100,100,160,64),paint);
canvas.drawRoundRect(SkRect::MakeXYWH(360,360,120,120),SkIntToScalar(10),SkIntToScalar(10),paint);
paint.setStrokeWidth(1);
SkFont font;
font.setSize(SkIntToScalar(23));
canvas.drawString("SkiaFly",200,200,font,paint);
saveBitmapAsPng("draw_basic_shape.png",bitmap);
}
效果如下:
一些小说明
SkScalar
看一下定义:
typedef float SkScalar;
其实就是个float.
我们平时使用的时候,可以直接使用float值,也可以使用
SkIntToScalar(x)
进行转换.SkPoint
可以使用静态构造方法构造:
SkPoint::Make(320,320)
SkRect
也是使用静态构造方法创建:
SkRect::MakeXYWH(100,100,160,64)
其他类型的构造方法其实也差不多,看一下源码和定义也就知道用途了.