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);