如何避免在 SkiaSharp 中“叠加”不透明度
Posted
技术标签:
【中文标题】如何避免在 SkiaSharp 中“叠加”不透明度【英文标题】:How to avoid "adding up" of opacities in SkiaSharp 【发布时间】:2017-12-12 15:48:25 【问题描述】:我目前正在创建一个 Xamarin.Forms 应用程序。我的一个页面使用 SkiaSharp 允许用户以文本标记样式(即不透明度低的黄色画笔)突出显示图像的某些部分。
这是相关的 SKPaint 对象的定义方式:
var strokePaint = new SKPaint()
Color = Color.FromRgba(255, 255, 0, 100).ToSKColor(),
Style = SKPaintStyle.Stroke,
StrokeWidth = StrokeWidth
;
到目前为止一切正常,但令我困扰的是,当我有多个重叠路径时,不透明度会“增加”,直到某个时候底层图片不再可见。
我能做些什么来避免这种重叠?我正在考虑将所有路径合并为一个,但这似乎不起作用,因为允许用户在笔划之间更改 StrokeWidth,而且我没有看到任何绘制宽度不同的路径的方法。
我希望你们中的任何人都对我有所帮助。任何想法表示赞赏!
【问题讨论】:
我对 Skia 不是很熟悉,但我查看了SKPaint
的文档,它看起来有一个BlendMode
属性。根据类似事物在其他系统中的工作方式,应该控制颜色的组合方式。您可能必须尝试不同的值才能获得所需的效果。 Dst
或 Modulate
看起来是不错的候选人。
【参考方案1】:
我对 Skia 不是很熟悉,但我查看了 SKPaint 的文档,看起来它有一个 BlendMode 属性。根据类似事物在其他系统中的工作方式,应该控制颜色的组合方式。您可能必须尝试不同的值才能获得所需的效果。 Dst 或 Modulate 看起来不错。 ——布拉德利·乌夫纳
感谢您的回答布拉德利!我使用Darken
混合模式并将不透明度设置为 255,这在突出显示文本时会产生非常好的效果(只有较暗的颜色可见,因此浅色背景上的深色文本在我的标记颜色背景上变成深色文本) .
【讨论】:
以上是关于如何避免在 SkiaSharp 中“叠加”不透明度的主要内容,如果未能解决你的问题,请参考以下文章
C# SkiaSharp OpenTK Winform - 如何从后台线程中绘制?