zoukankan      html  css  js  c++  java
  • skia入门

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

  • 相关阅读:
    234. Palindrome Linked List
    Remove duplicates
    Unsorted, maximum ==> sorted
    Find one unique integer
    TwoSum
    13. Roman to Integer
    38. Count and Say
    543. Diameter of Binary Tree
    LuoguP1131 [ZJOI2007]时态同步 (树形DP,贪心)
    Luogu3177 [HAOI2015]树上染色 (树形DP)
  • 原文地址:https://www.cnblogs.com/dongc/p/5225113.html
Copyright © 2011-2022 走看看