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