private void OnPaintCanvas(object sender, SKPaintSurfaceEventArgs e) { SKImageInfo info = e.Info; SKSurface surface = e.Surface; SKCanvas canvas = surface.Canvas; int surfaceWidth = info.Width; int surfaceHeight = info.Height; SKPoint surfaceSize = new SKPoint(surfaceWidth, surfaceHeight); //絵画開始 //背景色を塗る canvas.Clear(PaintColors.DefaultBackground); SKBitmap bitmap = PaintPatterns.CheckeredPattern(PaintColors.Black); //pathList絵画 foreach (var aPath in pathList) { if (!aPath.IsVisibility) { continue; } if (aPath.Points.Count >= 2) { canvas.DrawPath(aPath.ToSKPath(), aPath.FillPaint); canvas.DrawPath(aPath.ToSKPath(), aPath.StrokePaint); } else if (aPath.Points.Count == 1) { canvas.DrawPoint(aPath.GetFirst(), aPath.StrokePaint); } } //最前面 //Lasso色で暫定Pathを絵画 if (!inProgressPath.IsEmpty()) { if (inProgressPath.Points.Count >= 2) { canvas.DrawPath(inProgressPath.ToSKPath(), inProgressPath.FillPaint); canvas.DrawPath(inProgressPath.ToSKPath(), inProgressPath.StrokePaint); } else if (inProgressPath.Points.Count == 1) { canvas.DrawPoint(inProgressPath.GetFirst(), inProgressPath.StrokePaint); } } }
private void PenTipChanged() { //ペン先のstrokeカラー設定 SKColor strokeColor = PaintColors.Transparent; switch (strokeColorPicker.SelectedItem as string) { default: case "None": strokeColor = PaintColors.Transparent; break; case "Black": strokeColor = PaintColors.Black; break; case "White": strokeColor = PaintColors.White; break; case "Red": strokeColor = PaintColors.Red; break; case "Yellow": strokeColor = PaintColors.Yellow; break; case "Green": strokeColor = PaintColors.Green; break; case "Blue": strokeColor = PaintColors.Blue; break; } SKPaint strokePaint = new SKPaint { IsAntialias = false, Style = SKPaintStyle.Stroke, Color = strokeColor, StrokeWidth = (float)strokeSizeStepper.Value, StrokeJoin = SKStrokeJoin.Round }; inProgressPath.StrokePaint = strokePaint; //ペン先のfillカラー設定 SKColor fillColor = PaintColors.Transparent; switch (fillColorPicker.SelectedItem as string) { default: case "None": fillColor = PaintColors.Transparent; break; case "Black": fillColor = PaintColors.Black; break; case "White": fillColor = PaintColors.White; break; case "Red": fillColor = PaintColors.Red; break; case "Yellow": fillColor = PaintColors.Yellow; break; case "Green": fillColor = PaintColors.Green; break; case "Blue": fillColor = PaintColors.Blue; break; } SKBitmap bitmap = new SKBitmap(); //ペン先のパターン設定 switch (fillPatternPicker.SelectedItem as string) { default: case "Normal": bitmap = PaintPatterns.NormalPattern(fillColor); break; case "Rough3x3": bitmap = PaintPatterns.Rough3x3Pattern(fillColor); break; case "Rough2x2": bitmap = PaintPatterns.Rough2x2Pattern(fillColor); break; case "Beads4x4": bitmap = PaintPatterns.Beads4x4Pattern(fillColor); break; case "StripeX": bitmap = PaintPatterns.StripeXPattern(fillColor); break; case "StripeY": bitmap = PaintPatterns.StripeYPattern(fillColor); break; case "Checkered": bitmap = PaintPatterns.CheckeredPattern(fillColor); break; case "Dense2x2": bitmap = PaintPatterns.Dense2x2Pattern(fillColor); break; case "Dense3x3": bitmap = PaintPatterns.Dense3x3Pattern(fillColor); break; case "LeftHatching": bitmap = PaintPatterns.LeftHatching8x8Pattern(fillColor); break; case "RightHatching": bitmap = PaintPatterns.RightHatching8x8Pattern(fillColor); break; } //暫定Pathにpentipを設定 SKPaint fillPaint = new SKPaint { IsAntialias = false, Style = SKPaintStyle.Fill, Shader = SKShader.CreateBitmap(bitmap, SKShaderTileMode.Repeat, SKShaderTileMode.Repeat) }; inProgressPath.FillPaint = fillPaint; }