void PaintHeaderBar(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); SKPath path = new SKPath { FillType = SKPathFillType.EvenOdd }; path.AddRect(new SKRect(0, 0, info.Width, 8)); SKPaint paint = new SKPaint() { Style = SKPaintStyle.Fill, Color = new SKColor(0xFFE69A28) }; canvas.DrawPath(path, paint); paint.Style = SKPaintStyle.Stroke; paint.StrokeWidth = 2; paint.Color = SKColors.Black; canvas.DrawPath(path, paint); paint.Dispose(); path.Dispose(); }
public async Task RunAsync(string pathToRead) { _client.Timeout = TimeSpan.FromMilliseconds(TIMEOUT_MILLIS); _skPaint.Color = new SKColor(118, 118, 118, 255); await GetShapesAsync(pathToRead); if (_pendingToDownload.Count == 0) { Console.WriteLine("No shapes found"); return; } _totalCount = _pendingToDownload.Count; Console.WriteLine($"about to process {_pendingToDownload.Count} shapes"); var watch = System.Diagnostics.Stopwatch.StartNew(); await Task.WhenAll(new Task[] { DownloadAsync(), ProcessAsync() }); watch.Stop(); Console.WriteLine($"===completed with {_failureList.Count} errors and elapsed time: {watch.ElapsedMilliseconds / 1000f} seconds==="); _client.Dispose(); _skPaint.Dispose(); HandleFailure(); HandleSuccess(); }
void PaintRedBar(object sender, SKPaintSurfaceEventArgs args) { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; canvas.Clear(); SKPath path = new SKPath { FillType = SKPathFillType.EvenOdd }; path.AddPoly(new SKPoint[] { new SKPoint(0, 0), new SKPoint(info.Width, 8), new SKPoint(0, 8) }); SKPaint paint = new SKPaint() { Style = SKPaintStyle.Fill, Color = new SKColor(0xFF922610) }; canvas.DrawPath(path, paint); paint.Dispose(); path.Dispose(); //paint.Style = SKPaintStyle.Stroke; //paint.StrokeWidth = 2; //paint.Color = SKColors.Black; //canvas.DrawPath(path, paint); }
/// <summary> /// Closes this instance and frees resources. /// <para> /// After a call to this method, the canvas can no longer be used for drawing. /// </para> /// </summary> protected void Close() { if (_canvas != null) { _canvas.Dispose(); _canvas = null; } if (_bitmap != null) { _bitmap.Dispose(); _bitmap = null; } if (_path != null) { _path.Dispose(); _path = null; } if (_strokePaint != null) { _strokePaint.Dispose(); _strokePaint = null; _fillPaint.Dispose(); _fillPaint = null; _textPaint.Dispose(); _textPaint = null; _regularTypeface.Dispose(); _regularTypeface = null; _boldTypeface.Dispose(); _boldTypeface = null; } }
/// <summary> /// Create shape /// </summary> /// <param name="points"></param> /// <param name="shapeModel"></param> public override void CreateShape(IList <Point> points, IShapeModel shapeModel) { CreateCanvas(); var shape = new SKPath(); var origin = points.ElementAtOrDefault(0); if (origin == default) { return; } shape.MoveTo((float)origin.X, (float)origin.Y); for (var i = 1; i < points.Count; i++) { shape.LineTo((float)points[i].X, (float)points[i].Y); } shape.Close(); var pen = new SKPaint { Style = SKPaintStyle.Fill, Color = shapeModel.Color.ToSKColor() }; _canvas.DrawPath(shape, pen); pen.Dispose(); shape.Dispose(); }
public override void Dispose() { if (_dispose) { _brush.Dispose(); } }
private IRender RenderBlob() { using (var canvas = _render.CreateCanvas()) { canvas.Clear(); float x = _xCenterPos; float y = Height / 2f; var paint = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Shader = SKShader.CreateRadialGradient( new SKPoint(x, y), _size, new[] { _color, SKColors.Black }, null, SKShaderTileMode.Clamp), }; canvas.DrawOval(x, y, _size, _size, paint); paint.Dispose(); } return(_render); }
/// <summary> /// Create label /// </summary> /// <param name="point"></param> /// <param name="content"></param> /// <param name="shapeModel"></param> public override void CreateLabel(Point point, string content, IShapeModel shapeModel) { CreateCanvas(); var position = SKTextAlign.Center; switch (shapeModel.Position) { case TextAlignment.Left: position = SKTextAlign.Left; break; case TextAlignment.Right: position = SKTextAlign.Right; break; } var pen = new SKPaint { TextAlign = position, TextSize = (float)shapeModel.Size, Color = shapeModel.Color.ToSKColor() }; _canvas.DrawText( content, (float)point.X, (float)point.Y, pen); pen.Dispose(); }
private IRender RenderBars() { using (var canvas = _render.CreateCanvas()) { canvas.Clear(); lock (_barsLock) { foreach (var bar in _bars) { float scale = bar.Life / bar.MaxLife; float size = (1 - scale) * bar.MaxSize; float x = bar.Position - size / 2f; var paint = new SKPaint { IsAntialias = true, Color = bar.Color.WithScale(scale), Style = SKPaintStyle.Fill }; canvas.DrawRect(x, 0, size, Height, paint); paint.Dispose(); } } } return(_render); }
public virtual void Dispose() { _paintScaleBar?.Dispose(); _paintScaleBarStroke?.Dispose(); _paintScaleText?.Dispose(); _paintScaleTextStroke?.Dispose(); }
protected override void OnDraw(SKImageInfo info, SKCanvas canvas) { if (CanvasSizeChanged) { //新坐标系下的。 _destRect = SKRect.Create( _widthRatio * info.Width / -2, _heightRatio * info.Height / -2, _widthRatio * info.Width, _heightRatio * info.Height); } if (_bitmap != null) { SKRect mappedDestRect = Matrix.Invert().MapRect(_destRect); SKPaint paint = new SKPaint { IsStroke = true, StrokeWidth = 10, Color = SKColors.Red }; canvas.DrawRect(mappedDestRect, paint); _drawBitmapResult = canvas.DrawBitmap(_bitmap, _destRect, StretchMode, HorizontalAlignment, VerticalAlignment); paint.Dispose(); } }
/// <summary> /// Draws the graph on a canvas. /// </summary> /// <param name="Canvas">Canvas to draw on.</param> /// <param name="Points">Points to draw.</param> /// <param name="Parameters">Graph-specific parameters.</param> /// <param name="PrevPoints">Points of previous graph of same type (if available), null (if not available).</param> /// <param name="PrevParameters">Parameters of previous graph of same type (if available), null (if not available).</param> /// <param name="DrawingArea">Current drawing area.</param> public void DrawGraph(SKCanvas Canvas, SKPoint[] Points, object[] Parameters, SKPoint[] PrevPoints, object[] PrevParameters, DrawingArea DrawingArea) { SKPaint Pen = null; SKPath Path = null; bool First = true; try { Pen = Graph.ToPen(Parameters[0], Parameters[1]); Path = new SKPath(); foreach (SKPoint Point in Points) { if (First) { First = false; Path.MoveTo(Point); } else { Path.LineTo(Point); } } Canvas.DrawPath(Path, Pen); } finally { Pen?.Dispose(); Path?.Dispose(); } }
private void DrawGraph(SKCanvas Canvas, SKPoint[] Points, object[] Parameters, SKPoint[] PrevPoints, object[] PrevParameters, DrawingArea DrawingArea) { SKPaint Pen = null; SKPath Path = null; try { Pen = Graph.ToPen(Parameters[0], Parameters[1]); Path = CreateSpline(Points); Canvas.DrawPath(Path, Pen); } finally { if (Pen != null) { Pen.Dispose(); } if (Path != null) { Path.Dispose(); } } }
public override IRender Render(float dt) { var chromas = _featureCache.GetChromas(); using (var canvas = _render.CreateCanvas()) { canvas.Clear(); for (int i = 0; i < NumBars; i++) { if (chromas[i] >= _threshold) { var paint = new SKPaint { IsAntialias = true, Color = _color.WithScale(chromas[i]), Style = SKPaintStyle.Fill }; int x0 = i * _barSize; canvas.DrawRect(x0, 0, _barSize, Height, paint); paint.Dispose(); } } } return(_render); }
/// <inheritdoc /> public void Dispose() { Paint?.Dispose(); _disposable1?.Dispose(); _disposable2?.Dispose(); _disposable3?.Dispose(); }
public override IRender Render(float dt) { lock (_barsLock) { UpdateBars(dt); using (var canvas = _render.CreateCanvas()) { canvas.Clear(); for (int i = 0; i < _numBars; i++) { int x0 = i * _barSize; float intensity = 0; if (_bars[i].MaxLife > 0) { intensity = _bars[i].Value / _bars[i].MaxLife; } var paint = new SKPaint { IsAntialias = true, Color = _bars[i].Color.WithScale(intensity), Style = SKPaintStyle.Fill }; canvas.DrawRect(x0, 0, _barSize, Height, paint); paint.Dispose(); } } } return(_render); }
public void Dispose() { if (_disposePaint) { _paint?.Dispose(); } }
public void Dispose() { _paint?.Shader?.Dispose(); _paint?.Dispose(); _trailPaint?.Shader?.Dispose(); _trailPaint?.Dispose(); }
private IRender RenderBlobs() { float y = Height / 2f; using (var canvas = _render.CreateCanvas()) { canvas.Clear(); lock (_blobsLock) { foreach (var blob in _blobs) { float scale = blob.Life / blob.MaxLife; float size = (1 - scale) * blob.MaxSize; float x = blob.Position; var paint = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Shader = SKShader.CreateRadialGradient( new SKPoint(x, y), size, new[] { blob.Color.WithScale(scale), SKColors.Black }, null, SKShaderTileMode.Clamp), }; canvas.DrawOval(x, y, size, size, paint); paint.Dispose(); } } } return(_render); }
private void DrawGraph(SKCanvas Canvas, SKPoint[] Points, object[] Parameters, SKPoint[] PrevPoints, object[] PrevParameters, DrawingArea DrawingArea) { SKColor Color = Graph.ToColor(Parameters[0]); SKPaint Brush = new SKPaint { FilterQuality = SKFilterQuality.High, IsAntialias = true, Style = SKPaintStyle.Fill, Color = Color }; SKPath Path = new SKPath(); bool First = true; foreach (SKPoint P in Points) { if (First) { First = false; Path.MoveTo(P); } else { Path.LineTo(P); } } Path.Close(); Canvas.DrawPath(Path, Brush); Brush.Dispose(); Path.Dispose(); }
public override IRender Render(float dt) { float barValue = 0; if (_featureCache.IsBeat()) { _beatPeriod = _featureCache.GetBeatPeriod(); _remainingBeatTime = _beatPeriod; } else if (_remainingBeatTime > 0) { _remainingBeatTime = Math.Max(_remainingBeatTime - dt, 0); barValue = (1f - _remainingBeatTime / _beatPeriod); } int barSize = (int)(Width / 2 * barValue); using (var canvas = _render.CreateCanvas()) { canvas.Clear(); var paint = new SKPaint { IsAntialias = true, Color = _color, Style = SKPaintStyle.Fill }; canvas.DrawRect(Width / 2, 0, barSize, Height, paint); canvas.DrawRect(Width / 2 - barSize, 0, barSize, Height, paint); paint.Dispose(); } return(_render); }
protected override bool ReleaseManaged() { _forePaint.Dispose(); _alternPaint.Dispose(); _noisePaint.Dispose(); return(true); }
internal static void DisposeSelfAndProperties(this SKPaint paint) { paint.ImageFilter?.Dispose(); paint.ColorFilter?.Dispose(); paint.MaskFilter?.Dispose(); paint.Shader?.Dispose(); paint.Dispose(); }
public void Dispose() { if (_paint != null) { _paint.Dispose(); _paint = null; } }
public SKImage CreateBackgroundImage() { SKPaint paint = null; SKPath path = null; try { var height = (int)Bounds.Height; var width = (int)Bounds.Width; using (var surface = SKSurface.Create(width, height, SKColorType.N_32, SKAlphaType.Premul)) { var canvas = surface.Canvas; //canvas.Clear (SKColors.Beige); paint = new SKPaint { Color = SKColors.DarkBlue, IsStroke = true, StrokeWidth = 1, StrokeCap = SKStrokeCap.Round, IsAntialias = true }; //path = new SKPath (); //path.MoveTo (0f, 0f); //path.LineTo (width, height); //path.Close (); //canvas.DrawPath (path, paint); //DrawArc (canvas, paint, 0, 90); var start = -90; var end = 0; //DrawCircle (canvas, paint, width / 2, height / 2, width / 2 - 4); DrawArcFromTo(canvas, paint, width / 2, height / 2, width / 2 - 4, start, end); DrawArcFromTo(canvas, paint, width / 2, height / 2, (int)((width / 2 - 4) * 0.8), start, end); return(surface.Snapshot()); } } finally { if (paint != null) { paint.Dispose(); } if (path != null) { path.Dispose(); } } }
private void SKCanvasView_PaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs args) { var vm = BindingContext as DiceRollerViewModel; var diceRoller = new DiceRollerViewModel(); var diceRolls = diceRoller.DicesValues(vm.Type, vm.Quantity); foreach (var diceRoll in diceRolls) { Debug.WriteLine($"{diceRoll.Key} => {diceRoll.Value / vm.Quantity}"); } SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; float minx = diceRolls.Min(kv => kv.Value); float miny = diceRolls.Min(kv => kv.Key); float maxx = diceRolls.Max(kv => kv.Value); float maxy = diceRolls.Max(kv => kv.Key); float sumx = diceRolls.Sum(kv => kv.Value); float sizey = info.Height / (maxy - miny + 1); SKTypeface typeface = null; var inFont = AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.LinLibertine_R.ttf"); typeface = SKTypeface.FromStream(inFont); SKPaint strokePaint = new SKPaint() { Color = new SKColor(0x9B, 0x1C, 0x47), Style = SKPaintStyle.Stroke, StrokeWidth = 1, }; SKPaint strokeFont = new SKPaint() { Color = new SKColor(0x9B, 0x1C, 0x47), Style = SKPaintStyle.Stroke, StrokeWidth = 1, TextSize = sizey * 0.6f, Typeface = typeface }; canvas.Clear(); foreach (var diceRoll in diceRolls) { float x = diceRoll.Value; float y = diceRoll.Key; canvas.DrawRect(new SKRect(0, ((y - miny) * sizey), x * info.Width / maxx, ((y - miny) * sizey) + sizey - 5), strokePaint); canvas.DrawText($"{y} => {x / sumx * 100:0.00}%", 10, ((y - miny) * sizey) + sizey * 0.6f, strokeFont); } typeface.Dispose(); strokeFont.Dispose(); strokePaint.Dispose(); }
/// <summary> /// Draws the graph on a canvas. /// </summary> /// <param name="Canvas">Canvas to draw on.</param> /// <param name="Points">Points to draw.</param> /// <param name="Parameters">Graph-specific parameters.</param> /// <param name="PrevPoints">Points of previous graph of same type (if available), null (if not available).</param> /// <param name="PrevParameters">Parameters of previous graph of same type (if available), null (if not available).</param> /// <param name="DrawingArea">Current drawing area.</param> public void DrawGraph(SKCanvas Canvas, SKPoint[] Points, object[] Parameters, SKPoint[] PrevPoints, object[] PrevParameters, DrawingArea DrawingArea) { SKPaint Brush = null; SKPath Path = null; try { Brush = new SKPaint() { Style = SKPaintStyle.Fill, Color = Graph.ToColor(Parameters[0]) }; Path = new SKPath(); Path = Plot2DCurvePainter.CreateSpline(Points); if (PrevPoints is null) { IElement Zero; ISet Set = DrawingArea.MinY.AssociatedSet; if (Set is IGroup Group) { Zero = Group.AdditiveIdentity; } else { Zero = new DoubleNumber(0); } IVector XAxis = VectorDefinition.Encapsulate(new IElement[] { DrawingArea.MinX, DrawingArea.MaxX }, false, null) as IVector; IVector YAxis = VectorDefinition.Encapsulate(new IElement[] { Zero, Zero }, false, null) as IVector; PrevPoints = DrawingArea.Scale(XAxis, YAxis); if (DrawingArea.MinX is StringValue && DrawingArea.MaxX is StringValue) { PrevPoints[0].X = Points[0].X; PrevPoints[1].X = Points[Points.Length - 1].X; } } PrevPoints = (SKPoint[])PrevPoints.Clone(); Array.Reverse(PrevPoints); Plot2DCurvePainter.CreateSpline(Path, PrevPoints); Path.LineTo(Points[0]); Canvas.DrawPath(Path, Brush); } finally { Brush?.Dispose(); Path?.Dispose(); } }
internal static SKBitmap WatermarkText(SKBitmap original, ResizeParams resizeParams, WatermarkTextModel watermarkText) { var toBitmap = new SKBitmap(original.Width, original.Height); var canvas = new SKCanvas(toBitmap); // Draw a bitmap rescaled var paint = new SKPaint(); //paint.Typeface = SKTypeface.FromFamilyName("Arial"); paint.TextSize = watermarkText.TextSize; paint.TextAlign = watermarkText.TextAlign.GetSKTextAlign(); if (watermarkText.IsVerticalText) { paint.IsVerticalText = true; } else { paint.IsLinearText = true; } if (watermarkText.Type == 2) { paint.IsStroke = true; paint.StrokeWidth = watermarkText.StrokeWidth; paint.StrokeCap = SKStrokeCap.Round; } paint.Style = watermarkText.Type.GetSKPaintStyle(); paint.FilterQuality = watermarkText.Quality.GetSKFilterQuality(); paint.TextSkewX = watermarkText.TextSkewX; paint.IsAntialias = true; //https://www.color-hex.com/ if (SKColor.TryParse(watermarkText.Color, out SKColor color)) { paint.Color = color; } else { paint.Color = SKColors.Black; } canvas.DrawBitmap(original, 0, 0); var x = watermarkText.PositionMeasureType == 1 ? watermarkText.X : watermarkText.X.ToPixel(original.Width); var y = watermarkText.PositionMeasureType == 1 ? watermarkText.Y : watermarkText.Y.ToPixel(original.Height); canvas.DrawText(watermarkText.Value, x, y, paint); canvas.Flush(); canvas.Dispose(); paint.Dispose(); original.Dispose(); return(toBitmap); }
/// <summary> /// Draws the graph on a canvas. /// </summary> /// <param name="Canvas">Canvas to draw on.</param> /// <param name="Points">Points to draw.</param> /// <param name="Parameters">Graph-specific parameters.</param> /// <param name="PrevPoints">Points of previous graph of same type (if available), null (if not available).</param> /// <param name="PrevParameters">Parameters of previous graph of same type (if available), null (if not available).</param> /// <param name="DrawingArea">Current drawing area.</param> public void DrawGraph(SKCanvas Canvas, SKPoint[] Points, object[] Parameters, SKPoint[] PrevPoints, object[] PrevParameters, DrawingArea DrawingArea) { SKPaint Brush = null; SKPath Path = null; try { Brush = new SKPaint() { Color = Graph.ToColor(Parameters[0]), Style = SKPaintStyle.Fill }; Path = new SKPath(); float HalfBarWidth = (DrawingArea.Width - Points.Length) * 0.45f / Points.Length; float x0, y0, x1, y1; int i, c; if (!(PrevPoints is null)) { if ((c = PrevPoints.Length) != Points.Length) { PrevPoints = null; } else { for (i = 0; i < c; i++) { if (PrevPoints[i].X != Points[i].X) { PrevPoints = null; break; } } } } i = 0; foreach (SKPoint Point in Points) { x0 = Point.X - HalfBarWidth + 1; y0 = Point.Y; x1 = Point.X + HalfBarWidth - 1; y1 = PrevPoints != null ? PrevPoints[i++].Y : DrawingArea.OrigoY; Canvas.DrawRect(new SKRect(x0, y0, x1, y1), Brush); } Canvas.DrawPath(Path, Brush); } finally { Brush?.Dispose(); Path?.Dispose(); } }
public override void Draw(Diagram diagram) { // Select text alignment. int aVal = (int)Alignment; SKTextAlign alignment = SKTextAlign.Left; if (aVal % 3 == 2) { alignment = SKTextAlign.Right; } if (aVal % 3 == 1) { alignment = SKTextAlign.Center; } // Paint and style. SKFontStyle style = new SKFontStyle( Bold ? SKFontStyleWeight.Bold : SKFontStyleWeight.Normal, SKFontStyleWidth.Normal, Italic ? SKFontStyleSlant.Italic : SKFontStyleSlant.Upright ); SKPaint paint = new SKPaint { Color = Colour, IsAntialias = true, Typeface = SKTypeface.FromFamilyName(FontFamily, style), TextAlign = alignment, TextSize = FontSize }; TextWidth *= (paint.FontMetrics.MaxCharacterWidth / FontSize); // Compensation of font width. // Vertical alignment compensation. string[] lines = Content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); float comp = FontSize / 2; if (aVal < 3) { comp = FontSize; } else if (aVal > 5) { comp = 0; } for (int i = 0; i < lines.Length; i++) { diagram.DiagramSurface.Canvas.DrawText(lines[i], X, Y + comp + (i * FontSize), paint); } paint.Dispose(); }