0
我正在使用WPF和C#,并且我正在使用不透明蒙版将图像剪出来。我现在只需要得到这个人的轮廓,并删除该人的实际图像,以便只保留轮廓。仅渲染任意形状的对象的轮廓
我发现我可以使用阴影效果来获得类似人物轮廓的东西(这足以满足我的目的,但随意提出更好的方法)。但是,我不知道如何删除其他人,以便只保留轮廓/阴影?
我正在使用WPF和C#,并且我正在使用不透明蒙版将图像剪出来。我现在只需要得到这个人的轮廓,并删除该人的实际图像,以便只保留轮廓。仅渲染任意形状的对象的轮廓
我发现我可以使用阴影效果来获得类似人物轮廓的东西(这足以满足我的目的,但随意提出更好的方法)。但是,我不知道如何删除其他人,以便只保留轮廓/阴影?
这几个月太晚了,但也许这会帮助你或其他人。我来到这里寻求几乎同一主题的帮助,但有一个区别:我已经找到了答案。对于我的目的而言,这很简单,但对于较大图像(> 800 * 600)来说太慢了,所以我正在寻找更有效率的东西 - 看起来似乎没有多少机会。
首先,使用CopyPixels获取图像(或不透明蒙版)的字节数组。定义一个PathGeometry。然后对于通过测试的每个像素(在我的情况下,alpha> 0),向PathGeometry添加1 * 1像素的RectangleGeometry。然后使用PathGeometry.GetOutlinedPathGeometry将形状的轮廓作为几何体来获取。
这是我在VB.Net中写的一个函数,它可以帮助你通过插图。
Public Function GetImageOutline(bi As BitmapImage) As Geometry
Dim stride As Integer = bi.PixelWidth * 4
Dim height As Integer = bi.PixelHeight
Dim pg As New PathGeometry With {.FillRule = FillRule.Nonzero}
Dim pixels(height * stride - 1) As Byte
bi.CopyPixels(pixels, stride, 0)
For i As Integer = 0 To pixels.Count - 1 Step 4
'\\\Find non-transparent pixels (Alpha > 0):
If pixels(i + 3) > 0 Then
Dim x As Double = (i Mod stride) \ 4
Dim y As Double = Math.Floor(i/stride)
Dim pixG As New RectangleGeometry(New Rect(x, y, 1, 1))
pg.AddGeometry(pixG)
End If
Next
Return pg.GetOutlinedPathGeometry()
End Function