Ciao a tutti,
sono un novizio nella programmazione complessa, ma con buona volontà. Sto cercando di creare un'applicazione per windows phone. Prima di tutto sono dell'idea che tutto il codice di cui ho bisogno esiste già da qualche parte su internet, ma al momento, dopo varie ricerche non ho trovato nulla che mi servisse.
una parte della mia applicazione prevede il crop di una immagine selezionata dalla libreria delle foto o da una foto appena scattata. fin qui facile, ho trovato un samples che fa proprio questo.
in base ad una selezione fatta con il touch visivamente viene creato un rettangolo che rappresenta il contorno dell'immagine finale (quella croppata) che successivamente viene storata.
quello che vorrei fare io e ulteriore modifica a questo samples, ovvero la possibilità di creare più crop per una stessa immagine.
l'idea è: disegno il rettagolo, confermo, schiatto un tasto di add e creo un altro rettangolo. infine farà tante immagini quanti sono i rettangoli (per semplicità diciamo che l'utente potrà creare al massimo due ulteriori immagini).
ho provato e riprovato, ma evidentemente mi sfugge qualche cosa.
per prima cosa ho creato due rettangoli in xaml del tipo
codice:
<Rectangle x:Name="rect" Visibility="Collapsed"
Stroke="Black" StrokeThickness="5" ></Rectangle>
<Rectangle x:Name="rect2" Visibility="Collapsed"
Stroke="Black" StrokeThickness="5" ></Rectangle>
in seguito ho usato due eventi per gestire la renderizzazione
codice:
AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering
AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering2
dopodichè gestisco le coordinate con gli eventi del mouse
codice:
Private Sub CropImage_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
If cropping = False Then
p1 = e.GetPosition(DisplayedImageElement)
p2 = p1
rect.Visibility = Visibility.Visible
'rect2.Visibility = Visibility.Visible
Else
p1 = e.GetPosition(DisplayedImageElement)
p2 = p1
'rect.Visibility = Visibility.Visible
rect2.Visibility = Visibility.Visible
End If
cropping = True
End Sub
dove le costanti dovrebbero essere indirizzarmi nella gestione di uno e l'altro rettangolo.
le coordinate finali
codice:
Private Sub CropImage_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
p2 = e.GetPosition(DisplayedImageElement)
End Sub
codice:
Private Sub CropImage_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
p2 = e.GetPosition(DisplayedImageElement)
cropping = False
End Sub
infine il rendering dei rettangoli (la variazione di coordinate (+20) la spiego in seguito
codice:
Private Sub CompositionTarget_Rendering(ByVal sender As Object, ByVal e As EventArgs)
If cropping Then
p3 = p1
p4 = p2
rect.SetValue(canvas.LeftProperty, If(p3.X < p4.X, p3.X, p4.X))
rect.SetValue(canvas.TopProperty, If(p3.Y < p4.Y, p3.Y, p4.Y))
rect.Width = CInt(Fix(Math.Abs(p4.X - p3.X)))
rect.Height = CInt(Fix(Math.Abs(p4.Y - p3.Y)))
cropping2 = True
End If
End Sub
Private Sub CompositionTarget_Rendering2(ByVal sender As Object, ByVal e As EventArgs)
If cropping2 Then
rect2.SetValue(canvas.LeftProperty, If(p1.X < p2.X, p1.X + 20, p2.X + 20))
rect2.SetValue(canvas.TopProperty, If(p1.Y < p2.Y, p1.Y + 20, p2.Y + 20))
rect2.Width = CInt(Fix(Math.Abs(p2.X - p1.X))) + 20
rect2.Height = CInt(Fix(Math.Abs(p2.Y - p1.Y))) + 20
End If
End Sub
la variazione di coordinate le ho inserite per rendermi conto dell'effetto.
il problemi sono due.
1. mi vengono creati conteporaneamente due rettangoli (per questo il +20, altrimenti non avrei avuto visione)
2. se provo a disegnare un ulteriore rettangolo i primi 2 (che dovrebbe essere uno solo) scompaiono.
qualcuno mi può dare qualche dritta su come poter risolvere questo problema??
grazie mille =)