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
in seguito ho usato due eventi per gestire la renderizzazionecodice:<Rectangle x:Name="rect" Visibility="Collapsed" Stroke="Black" StrokeThickness="5" ></Rectangle> <Rectangle x:Name="rect2" Visibility="Collapsed" Stroke="Black" StrokeThickness="5" ></Rectangle>
dopodichè gestisco le coordinate con gli eventi del mousecodice:AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering AddHandler CompositionTarget.Rendering, AddressOf CompositionTarget_Rendering2
dove le costanti dovrebbero essere indirizzarmi nella gestione di uno e l'altro rettangolo.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
le coordinate finali
codice:Private Sub CropImage_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) p2 = e.GetPosition(DisplayedImageElement) End Subinfine il rendering dei rettangoli (la variazione di coordinate (+20) la spiego in seguitocodice:Private Sub CropImage_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs) p2 = e.GetPosition(DisplayedImageElement) cropping = False End Sub
la variazione di coordinate le ho inserite per rendermi conto dell'effetto.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
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 =)

Rispondi quotando