在SkiaSharp中,我可以使用SKPathFillType很好地填充两条曲线之间的空间。偶数奇数。下面我展示了代码的简化摘录。我的问题是,如何给曲线之间的填充区域指定一个特定的图案?在这里,我只能用一种颜色填充它,并使它透明。我对应用图案感兴趣,例如图案填充或点。
感谢您的支持。
问候,
Sorin
SKPath path = new SKPath();
path.FillType = SKPathFillType.EvenOdd;
// start the first curve
path.MoveTo(....);
path.LineTo(....); // draw the curve and close it
....
path.AddCircle(....); // add a second curve as a circle
SKPaint paint = new SKPaint(new SKFont(SKTypeface.Default)) {
IsAntialias = true,
Style = SKPaintStyle.Fill,
Color = SKColors.Blue.WithAlpha((byte)(0xFF * (1 - 0.5))),
StrokeWidth = 1
};
canvas.DrawPath(path, paint);
我用一个技巧解决了这个问题。首先,我完成了上面写的所有内容,即
canvas.DrawPath(path, paint)
将在两条曲线之间绘制一个填充区域,具有一定的透明度。除此之外(字面上(,我画了另一个模式:
var hatch = new SKPath();
hatch.AddCircle(0, 0, 1);
var hatchPaint = new SKPaint {
PathEffect = SKPathEffect.Create2DPath(SKMatrix.MakeScale(7, 7), hatch),
Color = SKColors.RosyBrown,
Style = SKPaintStyle.Stroke,
StrokeWidth = 3
};
再说一遍:
canvas.DrawPath(path, hatchPaint);
这将在曲线之间的填充区域顶部绘制一个漂亮的填充图案。注意:图案的大小是必不可少的-这里是AddCircle(0,0,1(,其中圆形光线为1像素。如果你有一个更大的填充图案,填充图案会溢出填充区域,这不是你想要的。对我来说,这看起来像SKIA中的一个bug。