void draw_bird_tail(SKCanvas canvas, SKPoint body_one, SKColor pc, SKColor dc) { if (RandomUtility.CreateRandom() < tail_chance) { //stroke(*dc) //fill( *pc ) int var_width = RandomUtility.CreateRandom(15, 30); int var_x = RandomUtility.CreateRandom(-25, -15); int var_y = RandomUtility.CreateRandom(-50, -30); if (RandomUtility.CreateRandom() < 0.3) { var_y *= -1; } //beginShape() var path = new SKPath { FillType = SKPathFillType.EvenOdd }; path.MoveTo(body_one.X, body_one.Y); path.LineTo(body_one.X + var_width, body_one.Y); path.LineTo(body_one.X + var_width + var_x, body_one.Y + var_y); path.LineTo(body_one.X + var_x, body_one.Y + var_y); path.Close(); SkiaSharpUtility.PathStroke(canvas, paint, dc, path); SkiaSharpUtility.PathFill(canvas, paint, pc, path); //endShape(CLOSE) } }
void draw_wings(SKCanvas canvas, List <SKPoint> wing, bool upper_wing = false) { List <SKBlendMode> modes = new List <SKBlendMode>() { SKBlendMode.ColorBurn, SKBlendMode.Multiply, SKBlendMode.Difference, SKBlendMode.Darken }; SKBlendMode style = RandomUtility.GetRandomElement <SKBlendMode>(modes); //canvas.ResetMatrix(); int canvasCacheTag = canvas.Save(); if (upper_wing) { canvas.Scale(1, -1); } paint.BlendMode = style; //draw_curve_filled( wing ) SkiaSharpUtility.DrawSplineCurve(canvas, paint, wing, true, SKPathFillType.Winding); paint.BlendMode = SKBlendMode.Multiply;// BLEND canvas.Scale(-1, 1); paint.BlendMode = style; // draw_curve_filled(wing) SkiaSharpUtility.DrawSplineCurve(canvas, paint, wing, true, SKPathFillType.Winding); paint.BlendMode = SKBlendMode.Multiply;// BLEND //canvas.ResetMatrix(); canvas.RestoreToCount(canvasCacheTag); }
void draw_curve_filled(SKCanvas canvas, List <SKPoint> points) { if (points == null) { return; } SkiaSharpUtility.DrawSplineCurve(canvas, paint, points, false, SKPathFillType.Winding); }
void draw(SKCanvas canvas) { float current_x = w / 2.0f - grid_x_pixels / 2.0f + 10; float current_y = h / 2.0f - grid_y_pixels / 2.0f + body_height - 10; var pc = RandomUtility.GetRandomElement <SKColor>(colors); double inc = .2f * 255; // 255 * RandomUtility.CreateRandom( 0.2, 1 ); // var dc = SkiaSharpUtility.CreateRGBColor((byte)(pc.Red - inc), (byte)(pc.Green - inc), (byte)(pc.Blue - inc)); drawBird(canvas, current_x, current_y, pc, bc, dc); }
void draw_bird_legs(SKCanvas canvas, float x, float y) { //stroke(0) //strokeCap( ROUND ) paint.StrokeCap = SKStrokeCap.Round; paint.Color = SkiaSharpUtility.CreateRGBColor(0, 0, 0); canvas.DrawLine(x - feet_length, y, x + feet_length, y, paint); canvas.DrawLine(x - feet_length / 3.0f, y, x - feet_length / 3.0f - feet_length / 2.0f, y - feet_length, paint); canvas.DrawLine(x + feet_length / 3.0f, y, x + feet_length / 3.0f - feet_length / 2.0f, y - feet_length, paint); }
void draw_16_points(SKCanvas canvas, List <SKPoint> points) { if (points == null || points.Count == 0) { return; } //var blendModeCache = paint.BlendMode; //paint.BlendMode = SKBlendMode.DstOver; SkiaSharpUtility.DrawSplineCurve(canvas, paint, points, true, SKPathFillType.EvenOdd); //SkiaSharpUtility.DrawPoints( canvas, paint, points ); //paint.BlendMode = blendModeCache; }
void draw_bird_eyes(SKCanvas canvas, SKColor dc) { float eye_x = head_x + head_radius / 6.0f; float eye_y = head_y - head_radius / 8.0f; //int eye_size = 25; // diameter float eye_radius = 12.5f; SkiaSharpUtility.CircleStroke(canvas, paint, dc, eye_x, eye_y, eye_radius); SkiaSharpUtility.CircleFill(canvas, paint, SKColors.White, eye_x, eye_y, eye_radius); //SkiaSharpUtility.CircleStroke( canvas, paint, SKColors.Black, eye_x, eye_y, 5 ); SkiaSharpUtility.CircleFill(canvas, paint, SKColors.Black, eye_x, eye_y, 5); }
public GeometricBird() { colors.Add(SkiaSharpUtility.CreateRGBColor(189, 208, 196)); colors.Add(SkiaSharpUtility.CreateRGBColor(154, 183, 211)); colors.Add(SkiaSharpUtility.CreateRGBColor(245, 210, 211)); colors.Add(SkiaSharpUtility.CreateRGBColor(247, 225, 211)); colors.Add(SkiaSharpUtility.CreateRGBColor(223, 204, 241)); paint = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Stroke, StrokeJoin = SKStrokeJoin.Round, StrokeWidth = line_thickness }; }
void drawAntennae(SKCanvas canvas, List <SKPoint> body, List <SKPoint> antennae) { List <SKPoint> points = new List <SKPoint>(); points.Add(body[2]); //points.Add( body[2] ); for (int i = 0; i < antennae.Count; i++) { var a = antennae[i]; //curveTightness(curve_tightness[i]) //curveVertex(x, y) points.Add(a); } SkiaSharpUtility.DrawSplineCurve(canvas, paint, points, false, SKPathFillType.EvenOdd); }
void draw_bird_beak(SKCanvas canvas, SKColor pc, SKColor bc, SKColor dc) { int y_variance = RandomUtility.CreateRandom(10, 40); int length_variance = RandomUtility.CreateRandom(50, 100); var p1 = new SKPoint(head_x, head_y - y_variance); var p2 = new SKPoint(head_x, head_y + y_variance); var p3 = new SKPoint(head_x + length_variance, head_y); paint.Style = SKPaintStyle.Stroke; paint.Color = dc; SkiaSharpUtility.DrawTriangle(canvas, paint, p1, p2, p3); paint.Style = SKPaintStyle.Fill; paint.Color = RandomUtility.CreateRandom() < body_fill_chance ? pc : bc; SkiaSharpUtility.DrawTriangle(canvas, paint, p1, p2, p3); }
public Stream Assemble() { // # Set the number of frames per second to display // frameRate( frame_rate ) //SKCanvas canvas = new SKCanvas() SKPath path = new SKPath(); Stream stream = null; SKImage skImage = null; try { using (var skSurface = SKSurface.Create(new SKImageInfo(w, h))) { var canvas = skSurface.Canvas; // # Sets color space to Hue Saturation Brightness with max values of HSB respectively // colorMode(HSB, 360, 100, 100, 100) //background(0, 0, 100) canvas.Clear(SKColors.White); // rectMode(CORNER) // draw ... draw(canvas); canvas.Flush(); //skImage = skSurface.Snapshot(); SKPaint paintConvert = SkiaSharpUtility.CreateDefaultPaint(); //skImage = SkiaSharpUtility.ScaleSurfaceToImage( skSurface, ImageCanvasSize, size, paintConvert ); skImage = skSurface.Snapshot(); } // encode SKData skData = SkiaSharpUtility.EncodeImageToSKData(skImage, "png"); stream = skData.AsStream(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (skImage != null) { skImage.Dispose(); } paint.Dispose(); } return(stream); }
public Stream Assemble(int size = 256) { //SKCanvas canvas = new SKCanvas() SKPath path = new SKPath(); Stream stream = null; SKImage skImage = null; try { using (var skSurface = SKSurface.Create(new SKImageInfo(w, h))) { var canvas = skSurface.Canvas; canvas.Clear(bc); //set background color // draw ... draw(canvas); canvas.Flush(); //skImage = skSurface.Snapshot(); SKPaint paintConvert = SkiaSharpUtility.CreateDefaultPaint(); skImage = SkiaSharpUtility.CropSurfaceToImage(skSurface, ImageCanvasSize, size, paintConvert); } // encode SKData skData = SkiaSharpUtility.EncodeImageToSKData(skImage, "png"); stream = skData.AsStream(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (skImage != null) { skImage.Dispose(); } paint.Dispose(); } return(stream); }
SKPoint draw_bird_body(SKCanvas canvas, float x, float y, SKColor pc, SKColor bc, SKColor dc) { // stroke(*dc) float body_bottom = y - feet_length / 2.0f; SKPoint body_one = new SKPoint(x - feet_length * 2.0f, body_bottom); SKPoint body_two = new SKPoint(x + feet_length * 1.5f, body_bottom); SKPoint body_three = new SKPoint(x + feet_length * 2.1f, body_bottom - body_height); SKPoint body_four = new SKPoint(x, body_bottom - body_height * 1.3f); SKPoint left_midpoint = new SKPoint((body_four.X + body_one.X) / 2, (body_four.Y + body_one.Y) / 2); SKPoint top_midpoint = new SKPoint((body_four.X + body_three.X) / 2, (body_four.Y + body_three.Y) / 2); SKPoint right_midpoint = new SKPoint((body_two.X + body_three.X) / 2, (body_two.Y + body_three.Y) / 2); SKPoint bottom_midpoint = new SKPoint((body_one.X + body_two.X) / 2, (body_one.Y + body_two.Y) / 2); //SKPoint true_midpoint = new SKPoint( ( left_midpoint.X + right_midpoint.X ) / 2, ( left_midpoint.Y + right_midpoint.Y ) / 2 ); List <SKPoint> body_points = new List <SKPoint>() { body_one, body_three, body_four, left_midpoint, top_midpoint, bottom_midpoint }; //fill( *bc ) //beginShape() var pathBody = new SKPath { FillType = SKPathFillType.EvenOdd }; pathBody.MoveTo(body_one); pathBody.LineTo(body_two); pathBody.LineTo(body_three); pathBody.LineTo(body_four); pathBody.Close(); SkiaSharpUtility.PathStroke(canvas, paint, dc, pathBody); SkiaSharpUtility.PathFill(canvas, paint, bc, pathBody); //endShape(CLOSE) int range = RandomUtility.CreateRandom(1, 4); for (int i = 0; i < range; i++) { var point_one = RandomUtility.GetRandomElement(body_points); var point_two = RandomUtility.GetRandomElement(body_points); var point_three = RandomUtility.GetRandomElement(body_points); //var point_four = RandomUtility.GetRandomElement( body_points ); // fill(pc[0], pc[1], pc[2]) //beginShape() var path = new SKPath { FillType = SKPathFillType.EvenOdd }; path.MoveTo(point_one); path.LineTo(point_two); path.LineTo(point_three); path.Close(); SkiaSharpUtility.PathStroke(canvas, paint, dc, path); SkiaSharpUtility.PathFill(canvas, paint, pc, path); //endShape(CLOSE) if (RandomUtility.CreateRandom() < 0.5) { draw_lines(canvas, body_points, dc); } } // for head_x = x + feet_length; head_y = body_bottom - body_height * 1.1f; return(body_one); }