Oppure

Loading
25/11/12 18:57
Uno sciame di API
Ciao a tutti, stavo creando un software per la modifica delle immagini però ho un problema: dovrei creare una funzione in grado di copiare in una PictureBox l'immagine contenuta in una spezzata chiusa tracciata dall'utente (tramite un'altra PictureBox), dovrei ottenere un effetto simile all'immagine allegata ma non so come fare. :_doubt:
Potreste aiutarmi? Grazie! :)
aaa
25/11/12 23:42
HeDo

secondo me una buona idea sarebbe quella di usare un po di matematica.
ogni segmento della spezzata individua una retta, e lo spazio all'interno del contorno si può vedere come l'insieme dei punti che verificano le N disequazioni delle rette che fanno parte della spezzata.

risolvi il sistema di disequazioni e hai gli intervalli di punti, dopodichè li copi dove ti pare :)
aaa
26/11/12 9:25
Snogar
Che ne dici invece di utilizzare l'oggetto Graphics e il metodo Xor della region selezionata?
aaa
26/11/12 14:02
Uno sciame di API
Ho risolto! :D
Se a qualcuno potesse servire ecco il codice che ho usato (ho creato una funzione):

Function TagliaImmagine(ByVal immagine As Bitmap, ByVal punti As List(Of Point))
Dim g As Graphics
Dim perimetro As System.Drawing.Drawing2D.GraphicsPath
Dim res As Bitmap
Dim tmpimg As Bitmap
If punti.Count >= 1 Then
perimetro = New System.Drawing.Drawing2D.GraphicsPath()
perimetro.AddPolygon(punti.ToArray)
tmpimg = New Bitmap(immagine)
g = Graphics.FromImage(tmpimg)
g.ExcludeClip(New Region(perimetro))
g.Clear(Color.Transparent)
g.Dispose()
Dim rect As RectangleF = perimetro.GetBounds()
res = New Bitmap(rect.Size.ToSize.Width, rect.Size.ToSize.Height)
g = Graphics.FromImage(res)
g.DrawImage(tmpimg, New Rectangle(New Point(0 - rect.Left.ToString, 0 - rect.Top.ToString), tmpimg.Size))
g.Dispose()
Else
res = immagine
End If
Return res
End Function
Ultima modifica effettuata da Uno sciame di API 26/11/12 16:33
aaa