Exemple #1
0
        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);
 }
Exemple #4
0
        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);
        }
Exemple #5
0
        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;
 }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }