skiasharp - SkiaSharp - 如何在曲线之间的填充空间上创建阴影或虚线图案
问题描述
在 SkiaSharp 中,我可以使用 SKPathFillType.EvenOdd 很好地填充两条曲线之间的空间。下面我展示了代码的简化摘录。我的问题是如何为曲线之间的填充区域赋予某种模式?在这里我只能用颜色填充它并赋予它透明度。我对应用图案感兴趣,例如影线或圆点。
感谢您的任何支持。
问候,
索林
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 中的一个错误。
推荐阅读
- pypi - 我的 PyPI 发行版只安装 dist
- python - 使用 python - 从嵌套的 Json 文件中读取数据并插入到 PostgreSQL 表中
- python - imageItem 保存功能不会保存应用了比例的图像
- conda - 创建新的 conda 环境时,我可以同时指定前缀和 yml 文件吗?
- reactjs - 喜欢/不喜欢切换 redux
- eclipse - 无法运行 Log4j2 演示类 - 将该类作为 Java 应用程序运行时,屏幕上弹出 Java 异常
- python-3.x - 每 30 秒生成一次坐标
- git - 更新了 .gitignore 并重置了 git 缓存,但目录不会被 git 忽略
- django - 如何从模板接收 django-html 动态“div-id”标签到views.py
- r - R 公式是否跨包将函数和变量滞后视为变量?