private void DrawLegends(SKCanvas canvas, int width, int height) { if (!LegendNames.Any()) { return; } List <SKColor> colors = new List <SKColor> { }; foreach (List <ChartEntry> l in MultiLineEntires) { colors.Add(l[0].Color); } int radius_size = 20; using (var paint = new SKPaint()) { paint.TextSize = this.LabelTextSize; paint.IsAntialias = true; paint.IsStroke = false; float x = 200 + radius_size * 2; float y = 50; foreach (string legend in LegendNames) { paint.Color = SKColor.Parse("#000000"); canvas.DrawText(legend, x + radius_size + 10, y, paint); paint.Color = colors.ElementAt(LegendNames.IndexOf(legend)); canvas.DrawCircle(x, y - radius_size / 2 - radius_size / 4, radius_size, paint); x += radius_size * 2 + this.LabelTextSize * (legend.Length / 2 + 2); } var minPoint = points.Min(p => p.Y); var maxPoint = points.Max(p => p.Y); paint.Color = SKColor.Parse("#000000"); paint.TextSize = 20; canvas.DrawCircle(12, minPoint, 5, paint); canvas.DrawText(NumbersTools.GetNember(multiLineMax), 0, minPoint - 20, paint); canvas.DrawCircle(12, maxPoint, 5, paint); canvas.DrawText(NumbersTools.GetNember(multiLineMin), 0, maxPoint - 20, paint); var step = maxPoint / 8; var valueStep = multiLineMax / 6; for (int i = 1; i < 6; i++) { var tt = (maxPoint - step * i); if (minPoint < (maxPoint - step * i) && Math.Abs(minPoint - (maxPoint - step * i)) >= step) { canvas.DrawCircle(12, (maxPoint - step * i), 5, paint); canvas.DrawText(NumbersTools.GetNember(valueStep * i), 0, (maxPoint - step * i) - 20, paint); } } } }
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); using (SKPaint paint = new SKPaint()) { int unit = info.Width / 188; int circleCentreX = 6 * unit; for (uint i = 0; i < 9; i++) { if (PIN.Length > i) { paint.Color = new SKColor(0xff416aff); paint.Style = SKPaintStyle.StrokeAndFill; paint.StrokeWidth = unit; canvas.DrawCircle(circleCentreX, 6 * unit, 5 * unit, paint); } else { paint.Color = new SKColor(0xffe4e6ed); paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = unit; canvas.DrawCircle(circleCentreX, 6 * unit, 5 * unit, paint); } circleCentreX += 22 * unit; } } }
public void Draw(SKCanvas canvas, float scale) { var screenDimensions = _drawingConfig.ScreenDimensions(scale); var sliderCenter = new SKPoint(_slider.Position.X * scale, _slider.Position.Y * scale); var radiusScale = !_slider.IsSelected ? 1f : 1.1f; var radius = _slider.Radius * radiusScale * scale; canvas.DrawCircle(sliderCenter, radius + screenDimensions.BetweenCirclesMargin, new SKPaint() { Shader = SKShader.CreateColor(_drawingConfig.BackgroundColor), IsStroke = false, IsAntialias = true }); canvas.DrawCircle(sliderCenter, radius, new SKPaint() { Shader = SKShader.CreateColor(_slider.Color), IsStroke = false, IsAntialias = true }); if (_slider.IsSelected) { canvas.DrawCircle(sliderCenter, radius / 2f, new SKPaint() { Shader = SKShader.CreateColor(_drawingConfig.BackgroundColor), IsStroke = false, IsAntialias = true }); } }
/// <summary> /// draw grid lines in the canvas /// </summary> /// <param name="args"></param> void SetupCanvas(SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; // gray color line paint SKPaint graphPaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Gray, StrokeWidth = 1, StrokeCap = SKStrokeCap.Square, StrokeJoin = SKStrokeJoin.Round }; // canvas is divived in to graph coordinates each coorinates size is respect to the screen width / height float widthDensity = Convert.ToSingle(canvasView.CanvasSize.Width / rows); float heightDensity = Convert.ToSingle(canvasView.CanvasSize.Height / rows); canvas.Clear(); int radious = 5; // draw grid lines vertically and horizontally for (int index = 0; index < rows + 1; index++) { canvas.DrawCircle(new SKPoint(index * widthDensity, 0), radious, graphPaint); canvas.DrawCircle(new SKPoint(index * widthDensity, canvasView.CanvasSize.Height), radious, graphPaint); canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint); canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint); canvas.DrawLine(index * widthDensity, 0, index * widthDensity, canvasView.CanvasSize.Height, graphPaint); canvas.DrawLine(0, index * heightDensity, canvasView.CanvasSize.Width, index * heightDensity, graphPaint); } }
//private void DrawBorder(SKCanvas canvas, int height, int width) //{ // using (var paint = new SKPaint { IsAntialias = true, Color = SKColors.Black, Style = SKPaintStyle.Stroke }) // { // canvas.DrawRect(0, 0, width, height, paint); // } //} private void DrawClearSky(SKCanvas canvas, int height, int width, float factor = 1, float xFactor = 1, float yFactor = 1) { using (var paint = new SKPaint { IsAntialias = true }) { if (!Weather.IsNightTime) { paint.Shader = SKShader.CreateLinearGradient( new SKPoint(0f, 0f), new SKPoint(0f, height), new SKColor[] { SKColors.LightGoldenrodYellow, SKColors.Yellow, SKColors.Orange }, new float[] { 0, 0.4f, 1 }, SKShaderTileMode.Clamp); canvas.DrawCircle((width / 2) * xFactor, (height / 2) * yFactor, width * 0.4f * factor, paint); } else { //TODO:NIGHT paint.Shader = SKShader.CreateLinearGradient( new SKPoint(0f, 0f), new SKPoint(0f, height), new SKColor[] { SKColors.LightGoldenrodYellow, SKColors.Yellow, SKColors.Orange }, new float[] { 0, 0.4f, 1 }, SKShaderTileMode.Clamp); canvas.DrawCircle((width / 2) * xFactor, (height / 2) * yFactor, width * 0.4f * factor, paint); } } }
public void Render(SKCanvas canvas, IGeometryVisual gemoetry, double scale) { var circle = gemoetry as ICircle; if (circle == null || !circle.IsValid) { return; } using (var paint = new SKPaint()) { // Draw Circle paint.Color = circle.Color.ToSkiaColor(); paint.IsAntialias = true; paint.IsStroke = true; paint.StrokeWidth = (float)(circle.Size * scale); canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint); // Fill Circle if (!circle.IsFilled) { return; } paint.Color = circle.Color.ToFillColor().ToSkiaColor(); paint.IsStroke = false; canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint); } }
void draw_bird_head(SKCanvas canvas, SKColor pc, SKColor dc) { paint.Style = SKPaintStyle.StrokeAndFill; paint.Color = SKColors.White; canvas.DrawCircle(head_x, head_y, head_radius, paint); if (RandomUtility.CreateRandom() < arc_chance) { paint.Style = SKPaintStyle.Fill; paint.Color = pc; // arc(head_x, head_y, head_size, head_size, random(.7, 1)*PI, 1.8*PI, PIE); double startAngle = RandomUtility.CreateRandom(0.7, 1) * Math.PI; double sweepAngle = 1.8 * Math.PI; canvas.DrawArc(new SKRect(head_x, head_y, head_x + head_radius, head_y + head_radius), (float)startAngle, (float)sweepAngle, true, paint); } paint.Color = dc; if (RandomUtility.CreateRandom() < head_fill_chance) { paint.Style = SKPaintStyle.StrokeAndFill; } else { paint.Style = SKPaintStyle.Stroke; } canvas.DrawCircle(head_x, head_y, head_radius, paint); }
public static void Draw(SKCanvas c) { const int count = 10; //number of digits in outer circle const float r = 100f; //outer circle radius const float f = 40f; //font size in points const float thicknessAdjust = 2 * f / 3; //thickness adjust of the two circles const float θ = 360f / count; //angle to rotate when drawing each digit var painter = new SkiaSharp.MathPainter(); var cx = c.DeviceClipBounds.Width / 2; var cy = c.DeviceClipBounds.Height / 2; painter.FontSize = f; //{ GlyphBoxColor = (SKColors.Red, SKColors.Red) }; //draw outer circle using (var black = new SKPaint { Color = SKColors.Black, IsAntialias = true }) c.DrawCircle(cx, cy, r + thicknessAdjust, black); painter.TextColor = SKColors.White; for (int i = 0; i < count; i++) { painter.LaTeX = i.ToString(); var m = painter.Measure() ?? throw new Structures.InvalidCodePathException("Invalid LaTeX"); painter.Draw(c, cx - m.Width / 2, cy + m.Height / 2 - r); c.RotateDegrees(θ, cx, cy); } //draw inner circle using (var white = new SKPaint { Color = SKColors.White, IsAntialias = true }) c.DrawCircle(cx, cy, r - thicknessAdjust, white); painter.TextColor = SKColors.Black; painter.LaTeX = @"\ \raisebox{25mu}{\begin{gather}C\#\\Math\end{gather}}\ "; painter.Draw(c); }
public void Render(SKCanvas canvas) { // Animation finished. Nothing to see here. if (Size < 0) { return; } // SkiaSharp shapes doesn't support inner stroke. It causes a weird empty circle if the stroke // width is greater than the double of the size of a shape. This is noticeable only under certain // conditions like low speed and wider ripples. This operation will produce perfect ripples // from start to finish. Paint.StrokeWidth = Math.Min(Paint.StrokeWidth, Size * 2); if (Size > 0 && Paint != null) { canvas.DrawCircle(Position, Size, Paint); } // Draw the trail if (_brush.Properties.RippleTrail) { // Start from end of ripple circle and ensure radios is never 0 canvas.DrawCircle(Position, Math.Max(0, Size - _brush.Properties.RippleWidth.CurrentValue / 2f), _trailPaint); } }
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); SKPaint paint = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.Red.ToSKColor(), StrokeWidth = 50 }; canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); if (showFill) { paint.Style = SKPaintStyle.Fill; paint.Color = SKColors.Blue; canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); } Form1_Paint(sender, args); }
public static void Draw(string mark, SKCanvas canvas, SKPoint center, SKPaint paint) { switch (mark) { case "x": paint.StrokeWidth = 3; paint.Style = SKPaintStyle.StrokeAndFill; canvas.DrawLine(center.X - 3, center.Y - 3, center.X + 3, center.Y + 3, paint); canvas.DrawLine(center.X - 3, center.Y + 3, center.X + 3, center.Y - 3, paint); return; case "o": paint.StrokeWidth = 1; paint.Style = SKPaintStyle.Stroke; canvas.DrawCircle(center.X, center.Y, 5, paint); return; case "*": paint.StrokeWidth = 1; paint.Style = SKPaintStyle.StrokeAndFill; canvas.DrawCircle(center.X, center.Y, 5, paint); return; default: paint.StrokeWidth = 1; paint.Style = SKPaintStyle.StrokeAndFill; canvas.DrawCircle(center.X, center.Y, 5, paint); return; } }
private void DrawSocket(SKCanvas canvas, float radius) { canvas.Save(); _paint.Style = SKPaintStyle.Fill; _paint.Color = BackgroundColor.ToBaseGradientColors(IsEnabled)[0]; canvas.DrawCircle(0, 0, radius.Scale(0.70f), _paint); canvas.Save(); canvas.Scale(1, -1); _textPaint.StrokeWidth = 2; _textPaint.Style = SKPaintStyle.StrokeAndFill; _textPaint.TextSize = radius.Scale(0.5f); _textPaint.Typeface = _typeface; _textPaint.Color = IndicatorsColor.ToSKColor(); canvas.DrawText(Value.ToString("000."), new SKPoint(-radius.Scale(0.45f), radius.Scale(0.20f)), _textPaint); canvas.Restore(); DrawStroke(radius); canvas.DrawCircle(0, 0, radius.Scale(0.70f), _paint); canvas.Restore(); }
private static void DrawRanges(Field field, SKCanvas canvas) { Boid boid = field.Boids[field.Boids.Count() - 1]; float vision = (float)field.Vision; float repel = (float)field.VisionRepel; using (var paint = new SKPaint() { IsAntialias = true, StrokeWidth = 2, IsStroke = true }) { canvas.Save(); canvas.Translate((float)boid.Pos.X, (float)boid.Pos.Y); canvas.RotateDegrees((float)boid.Vel.GetAngle()); paint.Color = SKColors.Yellow; canvas.DrawLine(-5, 0, 5, 0, paint); canvas.DrawLine(0, 0, 0, 10, paint); paint.Color = SKColors.Magenta; canvas.DrawCircle(0, 0, repel, paint); canvas.DrawLine(0, repel - 5, 0, repel + 5, paint); paint.Color = SKColors.LightGreen; canvas.DrawCircle(0, 0, vision, paint); canvas.DrawLine(0, vision - 10, 0, vision + 10, paint); canvas.Restore(); } }
public bool Draw(SKCanvas canvas, IReadOnlyViewport viewport, ILayer layer, IFeature feature, IStyle style, ISymbolCache symbolCache) { if (!(feature.Geometry is global::Mapsui.Geometries.Point worldPoint)) { return(false); } var screenPoint = viewport.WorldToScreen(worldPoint); var color = new SKColor((byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256), (byte)(256.0 * layer.Opacity * style.Opacity)); var colored = new SKPaint() { Color = color, IsAntialias = true }; var black = new SKPaint() { Color = SKColors.Black, IsAntialias = true }; canvas.Translate((float)screenPoint.X, (float)screenPoint.Y); canvas.DrawCircle(0, 0, 15, colored); canvas.DrawCircle(-8, -12, 8, colored); canvas.DrawCircle(8, -12, 8, colored); canvas.DrawCircle(8, -8, 2, black); canvas.DrawCircle(-8, -8, 2, black); using (var path = new SKPath()) { path.ArcTo(new SKRect(-8, 2, 8, 10), 25, 135, true); canvas.DrawPath(path, new SKPaint() { Style = SKPaintStyle.Stroke, Color = SKColors.Black, IsAntialias = true }); } return(true); }
//Evento donde se realiza todo el dibujo. Puede llamarse varias veces, por lo que debe mantener toda la información necesaria para volver a mostrar los gráficos private void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; //Estructura que contiene información sobre la superficie de dibujo (COMO EL ANCHO Y ALTO DE PIXELES) SKSurface surface = args.Surface; //OBjeto que representa la superficie de dibujo. Su propiedad mas importante es Canvas de tipo SKCanvas (linea abajo) SKCanvas canvas = surface.Canvas; //Contexto gráfico que usamos para realizar los dibujos. Encapsula un estado de gráficos, que incluye transformaciones y el recorte canvas.Clear(); //Método usado para limpiar el canvas con un color Transparente. Podemos pasarle como parámetro un color que será con el que limpiará, y lo establecerá //como fondo: canvas.Clear(SKColors.Yellow); //Se crea el contorno (borde) rojo del circulo SKPaint paint = new SKPaint //SKPaint es una colección de propiedades de debujo de gráficos. { Style = SKPaintStyle.Stroke, //Trazo de linea. Podemos establecer Stroke, fill (POR DEFECTO), o StrokeandFill (contorno y relleno del mismo color) Color = Color.Red.ToSKColor(), //Color del trazo. A DISTINGUIR entre colores de SkiaSharp (SKColors.Blue) y colores de xamarin (Color.Red). Se puede convertir los colores //de Xamarin a SkiaSharp con la propiedad ToSKColor (como en este ejemplo) StrokeWidth = 25 //Pixeles del trazo }; paint.IsAntialias = true; //Antialiasing a true para suavizart los bordes canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); //Las coordenadas se toman como referencia desde la esquina superior izquierda. //Pintamos el borde círculo (coordenada X pantalla, coordenada Y pantalla, radio del círculo, objeto SkPain) //Pintamos el interior del circulo, creando otro circulo sobre el mismo punto del anterior. PINTA EL ANTERIOR, Y SOBRE EL SU RELLENO PARA QUE PUEDAN TENER 2 COLORES DISTINTOS if (showFill)//Togle que pinta y quita el relleno cuando hacemos tap (click) sobre el circulo { paint.Style = SKPaintStyle.Fill; paint.Color = SKColors.Blue; canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); } }
private void DrawFluidGlass(SKPaintSurfaceEventArgs e) { SKImageInfo info = e.Info; SKSurface surface = e.Surface; SKCanvas canvas = surface.Canvas; SKPoint center = new SKPoint(info.Width / 2, info.Height / 2); // fluid glass SKPoint bottomFluidGlassHullCenter = new SKPoint(info.Width / 2, info.Height + bottomFluidGlassCircleCenterY); SKPaint fluidGlassHullPaint = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Color = GlassColor.ToSKColor(), }; SKRect fluidTopGlass = new SKRect(); fluidTopGlass.Left = bottomFluidGlassHullCenter.X - topFluidGlassWidth / 2; fluidTopGlass.Top = 0 + topFluidGlassCircleCenterY; fluidTopGlass.Right = bottomFluidGlassHullCenter.X + topFluidGlassWidth / 2; fluidTopGlass.Bottom = bottomFluidGlassHullCenter.Y; var width = fluidTopGlass.Width / 2; // top fluid glass canvas.DrawRect(fluidTopGlass, fluidGlassHullPaint); canvas.DrawCircle(bottomFluidGlassHullCenter.X, fluidTopGlass.Top, fluidTopGlass.Width / 2, fluidGlassHullPaint); // bottom fluid glass canvas.DrawCircle(bottomFluidGlassHullCenter.X, bottomFluidGlassHullCenter.Y, bottomFluidGlassHullRadius, fluidGlassHullPaint); }
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); using (SKPaint paint = new SKPaint()) { paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = 2; if (drawStage > 0) { paint.Color = new SKColor(0x66416aff); canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 3, paint); } if (drawStage > 1) { paint.Color = new SKColor(0x33416aff); canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 4, paint); } if (drawStage > 2) { paint.Color = new SKColor(0x22416aff); canvas.DrawCircle(info.Width / 2, info.Height / 2, info.Height / 10 * 5, paint); } } }
private void OnCanvasViewPaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); SKPaint paint = new SKPaint() { Style = SKPaintStyle.Stroke, Color = Color.Red.ToSKColor(), StrokeWidth = 50, IsAntialias = true }; canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); if (showFill) { paint.Style = SKPaintStyle.Fill; paint.Color = SKColors.Blue; canvas.DrawCircle(info.Width / 2, info.Height / 2, 100, paint); } }
public void PaintSurface(SkiaManager skiaManager, SKCanvas canvas) { (Vector2 Min, Vector2 Max) = RectTransform.Rect; float radius = ((CircleArea)StartRegion).Radius; SKPoint pos = ((CircleArea)StartRegion).Position.ToSKPoint(); canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(radius), IdlePaint); canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(MaxLength), MaxLengthAreaPaint); if (Pressed) { var endPos = (((CircleArea)StartRegion).Position + Delta).ToSKPoint(); canvas.DrawLine(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(endPos), LinePaint); var pointer = OnSketchPointer; SKPoint pointerPoint = skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(new SKPoint(pointer.Point.X, pointer.Point.Y)); StringBuilder sb = new StringBuilder(); sb.AppendLine("POINTER INFO:"); foreach (var area in AreaList.ToArray()) { if (area.Status == AreaStatus.Pressed) { sb.Append(area.AreaIdentifier + ", "); } } canvas.DrawText(sb.ToString(), pointerPoint, _BoardFontPaint); } }
void SetupCanvas(SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; SKPaint graphPaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = SKColors.Gray, StrokeWidth = 1, StrokeCap = SKStrokeCap.Square, StrokeJoin = SKStrokeJoin.Round }; float widthDensity = Convert.ToSingle(canvasView.CanvasSize.Width / rows); float heightDensity = Convert.ToSingle(canvasView.CanvasSize.Height / rows); canvas.Clear(); int radious = 5; for (int index = 0; index < rows + 1; index++) { canvas.DrawCircle(new SKPoint(index * widthDensity, 0), radious, graphPaint); canvas.DrawCircle(new SKPoint(index * widthDensity, canvasView.CanvasSize.Height), radious, graphPaint); canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint); canvas.DrawCircle(new SKPoint(0, index * heightDensity), radious, graphPaint); canvas.DrawLine(index * widthDensity, 0, index * widthDensity, canvasView.CanvasSize.Height, graphPaint); canvas.DrawLine(0, index * heightDensity, canvasView.CanvasSize.Width, index * heightDensity, graphPaint); } }
public void Render(SKCanvas canvas, IGeometryVisual gemoetry, double scale) { var circle = gemoetry as ICircle; if (circle == null || !circle.IsValid) { return; } using (var paint = new SKPaint()) { // Draw Circle paint.Color = circle.ToolSettings.SelectedColor.ToSkiaColor(); paint.IsAntialias = true; paint.IsStroke = true; paint.StrokeWidth = (float)(circle.Size * scale); canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint); // Fill Circle paint.Color = circle.ToolSettings.SelectedColor.ToFillColor().ToSkiaColor(); paint.IsStroke = false; if (circle.IsFilled) { canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint); } if (circle.IsStenciled) { using (var shader = ShaderFactory.Line(circle.ToolSettings.SelectedColor.ToSkiaColor())) { paint.Shader = shader; } canvas.DrawCircle((float)(circle.Start.X * scale), (float)(circle.Start.Y * scale), (float)(circle.Radius * scale), paint); } } }
public void PaintSurface(SkiaManager skiaManager, SKCanvas canvas) { (Vector2 Min, Vector2 Max) = RectTransform.Rect; //SKRect rect = skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRect(new SKRect(Min.X, Min.Y, Max.X, Max.Y)); //canvas.DrawRect(rect, dragPaint); float radius = ((CircleArea)StartRegion).Radius; SKPoint pos = ((CircleArea)StartRegion).Position.ToSKPoint(); canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(pos), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(radius), paint); if (Pressed) { float Direction = (float)(Math.Atan2(Delta.Y, Delta.X) * 180 / Math.PI); float factor = 0; float Distance = Delta.Length(); if (Direction < 0) { factor = (Direction + 360) / 360; } else { factor = (Direction) / 360; } SKColor baseColor = new SKColor(255, (byte)(255 * factor), 0); dragPaint.Color = baseColor; canvas.DrawCircle(skiaManager.SketchSpaceToCanvasSpaceMatrix.MapPoint(((CircleArea)StartRegion).Position.ToSKPoint()), skiaManager.SketchSpaceToCanvasSpaceMatrix.MapRadius(Distance), dragPaint); } }
private void surface_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintSurfaceEventArgs e) { if (!enabled) { return; } SKCanvas canvas = e.Surface.Canvas; canvas.Clear(); float width = e.Info.Width; float height = e.Info.Height; // Draw axis canvas.DrawColor(SKColors.LightGray); canvas.DrawLine(0, 0, 0, height, black); canvas.DrawLine(0, height - 1.5f, width, height - 1.5f, black); canvas.DrawText("X2", 28.0f, 35.0f, black); canvas.DrawText("X1", width - 45.0f, height - 35.0f, black); // Draw dots foreach (SKPoint pt in red_points) { canvas.DrawCircle(pt, 5, red); } foreach (SKPoint pt in blue_points) { canvas.DrawCircle(pt, 5, blue); } }
protected override void OnPaintSurface(SKPaintSurfaceEventArgs args) { base.OnPaintSurface(args); SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; byte R = (byte)(PulseColor.R * 255); byte G = (byte)(PulseColor.G * 255); byte B = (byte)(PulseColor.B * 255); canvas.Clear(); if (IsRun) { SKPoint center = new SKPoint(info.Width / 2, info.Height / 2); float baseRadius = Math.Min(info.Width, info.Height) / 12; float radius = 0; Console.WriteLine(radius); for (int i = 0; i < t.Length; i++) { radius = info.Width / 2 * (t[i]); paint.Color = new SKColor(R, G, B, (byte)(255 * (1 - t[i]))); paint.Style = SKPaintStyle.Fill; canvas.DrawCircle(center.X, center.Y, radius, paint); } paint.Color = new SKColor(R, G, B); canvas.DrawCircle(center.X, center.Y, 100, paint); if (resourceBitmap != null) { canvas.DrawBitmap(resourceBitmap, center.X - resourceBitmap.Width / 2, center.Y - resourceBitmap.Height / 2); } } }
protected override void OnPaintSurface(SKPaintSurfaceEventArgs args) { base.OnPaintSurface(args); SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; SKPaint paint = new SKPaint { Style = SKPaintStyle.Stroke }; byte R = (byte)(PulseColor.R * 255); byte G = (byte)(PulseColor.G * 255); byte B = (byte)(PulseColor.B * 255); canvas.Clear(); SKPoint center = new SKPoint(info.Width / 2, info.Height / 2); float radius = info.Width / 2 * _time; paint.Color = new SKColor(R, G, B, (byte)(255 * (1 - _time))); paint.Style = SKPaintStyle.Fill; canvas.DrawCircle(center.X, center.Y, radius, paint); paint.Color = new SKColor(R, G, B); canvas.DrawCircle(center.X, center.Y, 85, paint); if (_resourceBitmap != null) { canvas.DrawBitmap(_resourceBitmap, center.X - _resourceBitmap.Width / 2, center.Y - _resourceBitmap.Height / 2); } }
/// <summary> /// CanvasView PaintSurface maiking a panel /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void SKCanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); // paint object for circles SKPaint circlePaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#75D59F").ToSKColor(), StrokeWidth = 3, IsAntialias = true }; SKPaint filledCirclePaint = new SKPaint { Style = SKPaintStyle.StrokeAndFill, Color = Color.FromHex("#75D59F").ToSKColor(), StrokeWidth = 3, IsAntialias = true }; SKPaint dottendLinePaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.FromHex("#75D59F").ToSKColor(), StrokeWidth = 3, IsAntialias = true, PathEffect = SKPathEffect.CreateDash(new float[] { 20, 15 }, 0) }; float margin = 40; float radius = 15; float linePadding = 100; canvas.DrawCircle(new SKPoint(margin, info.Height / 2), radius, filledCirclePaint); canvas.DrawCircle(new SKPoint(margin, info.Height / 2), radius * 2, circlePaint); canvas.DrawLine( new SKPoint(linePadding, info.Height / 2), new SKPoint(info.Width / 2 - linePadding, +info.Height / 2), circlePaint ); canvas.DrawCircle(new SKPoint(info.Width / 2, info.Height / 2), radius, circlePaint); canvas.DrawLine( new SKPoint(info.Width / 2 + linePadding, info.Height / 2), new SKPoint(info.Width - linePadding, info.Height / 2), dottendLinePaint ); canvas.DrawCircle(new SKPoint(info.Width - margin, info.Height / 2), radius, circlePaint); }
void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); // Translate to center canvas.Translate(info.Width / 2, info.Height / 2); // Draw the circle float radius = Math.Min(info.Width, info.Height) / 3; canvas.DrawCircle(0, 0, radius, blackStroke); // Get the value of the Slider float angle = (float)angleSlider.Value; // Calculate length of control point line float length = radius * 4 * (float)Math.Tan(Math.PI * angle / 180 / 4) / 3; // Calculate sin and cosine for half that angle float sin = (float)Math.Sin(Math.PI * angle / 180 / 2); float cos = (float)Math.Cos(Math.PI * angle / 180 / 2); // Find the end points SKPoint point0 = new SKPoint(-radius * sin, radius * cos); SKPoint point3 = new SKPoint(radius * sin, radius * cos); // Find the control points SKPoint point0Normalized = Normalize(point0); SKPoint point1 = point0 + new SKPoint(length * point0Normalized.Y, -length * point0Normalized.X); SKPoint point3Normalized = Normalize(point3); SKPoint point2 = point3 + new SKPoint(-length * point3Normalized.Y, length * point3Normalized.X); // Draw the points canvas.DrawCircle(point0.X, point0.Y, 10, blackFill); canvas.DrawCircle(point1.X, point1.Y, 10, blackFill); canvas.DrawCircle(point2.X, point2.Y, 10, blackFill); canvas.DrawCircle(point3.X, point3.Y, 10, blackFill); // Draw the tangent lines canvas.DrawLine(point0.X, point0.Y, point1.X, point1.Y, dottedStroke); canvas.DrawLine(point3.X, point3.Y, point2.X, point2.Y, dottedStroke); // Draw the Bezier curve using (SKPath path = new SKPath()) { path.MoveTo(point0); path.CubicTo(point1, point2, point3); canvas.DrawPath(path, redStroke); } }
private void canvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e) { SKImageInfo info = e.Info; SKCanvas sKCanvas = e.Surface.Canvas; sKCanvas.Clear(); SKPaint sKPaint = new SKPaint { Style = SKPaintStyle.Stroke, Color = Color.Red.ToSKColor(), StrokeWidth = 25 }; sKPaint.Style = SKPaintStyle.Fill; sKPaint.Color = SKColors.Blue; sKCanvas.DrawCircle((info.Width / 2) + (accX * -500), (info.Height / 2) + (accY * 500), 100, sKPaint); //네이버로 이동하는 원 sKPaint.Style = SKPaintStyle.Stroke; sKPaint.Color = SKColors.Green; sKCanvas.DrawCircle((info.Width / 2) - 200, info.Height / 2, 100, sKPaint); //종료하는 원 sKPaint.Style = SKPaintStyle.Stroke; sKPaint.Color = SKColors.Black; sKCanvas.DrawCircle((info.Width / 2) + 200, info.Height / 2, 100, sKPaint); if ((info.Width / 2) + (accX * -500) < (info.Width / 2) - 200 && (info.Height / 2) + (accY * 500) > info.Height / 2) { if (open == 0) { Open(); open = 1; } Device.StartTimer(TimeSpan.FromSeconds(3), () => { if (open == 1) { Open(); open = 0; return(true); } return(false); }); } if ((info.Width / 2 + accX * -500) > (info.Width / 2) + 200 && (info.Height / 2 + accY * 500) > info.Height / 2) { OnDestroy(); } }
private void CanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e) { SKImageInfo info = e.Info; SKCanvas canvas = e.Surface.Canvas; SKPaint strokePaint = GetPaintColor(SKPaintStyle.Stroke, null, 10, SKStrokeCap.Square); SKPaint dotPaint = GetPaintColor(SKPaintStyle.Fill, "#DE0469"); canvas.Clear(); SKRect arcRect = new SKRect(10, 10, info.Width - 10, info.Height - 10); canvas.DrawOval(new SKRect(25, 25, info.Width - 25, info.Height - 25), GetPaintColor(SKPaintStyle.Fill, "#FFFFFF")); strokePaint.Shader = SKShader.CreateLinearGradient( new SKPoint(arcRect.Left, arcRect.Top), new SKPoint(arcRect.Right, arcRect.Bottom), new SKColor[] { SKColor.Parse("#DE0469"), SKColors.Transparent }, new float[] { 0, 1 }, SKShaderTileMode.Repeat); Path.ArcTo(arcRect, 45, 105, true); canvas.DrawPath(Path, strokePaint); canvas.Translate(info.Width / 2, info.Height / 2); canvas.Scale(info.Width / 200f); canvas.Save(); canvas.RotateDegrees(240); canvas.DrawCircle(0, -75, 2, dotPaint); canvas.Restore(); DateTime dateTime = DateTime.Now; //Draw hour hand canvas.Save(); canvas.RotateDegrees(30 * dateTime.Hour + dateTime.Minute / 2f); canvas.DrawLine(0, 5, 0, -60, GetPaintColor(SKPaintStyle.Stroke, "#262626", 4, SKStrokeCap.Square)); canvas.Restore(); //Draw minute hand canvas.Save(); canvas.RotateDegrees(6 * dateTime.Minute + dateTime.Second / 10f); canvas.DrawLine(0, 10, 0, -90, GetPaintColor(SKPaintStyle.Stroke, "#DE0469", 2, SKStrokeCap.Square)); canvas.Restore(); canvas.DrawCircle(0, 0, 5, dotPaint); SecondsTxt.Text = dateTime.Second.ToString("00"); TimeTxt.Text = dateTime.ToString("hh:mm"); PeriodTxt.Text = dateTime.Hour >= 12 ? "PM" : "AM"; var alarmDiff = GetNextAlarm() - dateTime; AlarmTxt.Text = $"{alarmDiff.Hours}h {alarmDiff.Minutes}m until next alarm"; }
/// <summary> /// Fills the cache with bitmaps for the given dataset. /// </summary> protected void Fill(DataSetImageCache cache, ILineDataSet set, bool drawCircleHole, bool drawTransparentCircleHole) { int colorCount = set.CircleColorCount; float circleRadius = set.CircleRadius; float circleHoleRadius = set.CircleHoleRadius; var circleBitmaps = cache.CircleBitmaps; var circlePath = cache.CirclePathBuffer; for (int i = 0; i < colorCount; i++) { var circleBitmap = new SKBitmap((int)(circleRadius * 2.1), (int)(circleRadius * 2.1)); var canvas = new SKCanvas(circleBitmap); circleBitmaps[i] = circleBitmap; RenderPaint.Color = set.GetCircleColor(i); if (drawTransparentCircleHole) { // Begin path for circle with hole circlePath.Reset(); circlePath.AddCircle( circleRadius, circleRadius, circleRadius, SKPathDirection.Clockwise); // Cut hole in path circlePath.AddCircle( circleRadius, circleRadius, circleHoleRadius, SKPathDirection.CounterClockwise); // Fill in-between canvas.DrawPath(circlePath, RenderPaint); } else { canvas.DrawCircle( circleRadius, circleRadius, circleRadius, RenderPaint); if (drawCircleHole) { canvas.DrawCircle( circleRadius, circleRadius, circleHoleRadius, CirclePaintInner); } } } }