如何填充除某些区域(路径)C#Graphics之外的路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何填充除某些区域(路径)C#Graphics之外的路径相关的知识,希望对你有一定的参考价值。

现在我正在开发一个Windows表单C#App,它用dlib检测你的脸(https://github.com/takuya-takeuchi/DlibDotNet) 它获得了具有积分的68个面部地标

面对具有其要点的地标:enter image description here

因此,我已经为嘴唇,鼻子,眼睛和眉毛制作了一个图形路径,以及一条围绕着所有脸部的路径,我的问题是,是否可以减去眼睛,眉毛,嘴唇和鼻子的路径。覆盖所有的脸,所有的脸都“排除”那些区域?

我发现这在xaml中是可能的:

(Qazxswpoi)https://docs.microsoft.com/en-us/visualstudio/designers/draw-shapes-and-paths?view=vs-2017

那么可以在C#中使用图形路径和位图进行ExcludeOverlap或Substract吗?如果是这样怎么样?

(我知道发布一些代码几乎是一个不言而喻的规则,但我基本上做的是为面部的每个部分创建一个图形路径,然后使用Graphics.FillPath()在位图上绘制它们)

答案

是否有可能从覆盖所有脸部的眼睛,眉毛,嘴唇和鼻子路径中减去所有脸部“排除”那些区域?

这不仅是可能的;事实上,这是组合enter image description here的默认设置:您将较小的内部路径添加到较大的外部路径,当您填充它们时,它们将是空洞。

但是,当您在“孔”上覆盖更多路径时会发生这种情况,从而导致孔内的正面区域。

要使所有路径相加(Or -ing),您可以将GraphicsPaths属性更改为FillMode。默认值是“替代”,它将创建漏洞(Xor -ing the araes。)

要获得完全控制,您可以使用Winding。它们可以随意与整组设置操作组合。但它们不支持抗锯齿,因此曲线和倾斜线看起来很粗糙。

例:

Regions

enter image description here

以上是关于如何填充除某些区域(路径)C#Graphics之外的路径的主要内容,如果未能解决你的问题,请参考以下文章

重新填充画布擦除区域的区域

使用 Core Graphics 绘制带有减去文本的路径

填充路径时使用的非零环绕规则

如何在没有 mod_rewrite 的情况下重定向除一个路径及其所有子路径之外的所有 URL?

在 Powershell 中创建除某些文件和文件夹之外的 zip 文件的功能

通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索