Principale utente con più risposte
Come impostare il viewport

Domanda
-
Salve a tutti. Usando un oggetto Image mi sono imbattuto nel problema di stabilire l'origine del disegno che è normalmente impostato in alto a sinistra. ho bisogno di portarlo in basso a sinistra come nei normali assi cartesiani.
l'istanza si apre con il seguente codice:
using (DrawingContext drwo = drw.RenderOpen()) e per disegnare: drwo.DrawLine(gh1, jh, hj); dove gh1 è il pennello e jh e hj sono le coordinate poi si effettua l'operazione di rendering: bmp.Render(drw); } immagine.Source = bmp; dove bmp è definito come: RenderTargetBitmap bmp = new RenderTargetBitmap(577, 577, 10, 10, PixelFormats.Pbgra32);
E' possibile ottenere il risultato ponendo nell'ordinata y il valore Image.Height-y. Penso che ci sarà un modo migliore:
La mia domanda è come ottenere il ViewPort nell'origine.
ringrazio in anticipo per l'eventuale risposta
Aggiungo che si può seguire la via di mettere al posto della ordinata y con image.Height-y tuttavia ci sarà un modo migliore.
Aggiungo che si può seguire la via di mettere al posto della ordinata y con image.Height-y tuttavia ci sarà un modo migliore.
- Modificato Plamen TimevMicrosoft contingent staff, Moderator martedì 29 novembre 2022 12:52 Added code block
- Modificato molokko martedì 29 novembre 2022 16:16
Risposte
-
Ciao, secondo me dovresti fare una trasformazione degli assi, per porre l'origine in basso a sinistra, e invertire l'asse Y, una cosa di questo tipo:
Canvas myCanvas = new Canvas(); myCanvas.Width = 300; myCanvas.Height = 300; myCanvas.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#005588")); //inverte l'asse Y e fissa la nuova origine che così viene in basso a sinistra: myCanvas.LayoutTransform = new ScaleTransform(1,-1, 0, 0); MyGrid.Children.Add(myCanvas); DrawingVisual drw = new DrawingVisual(); DrawingContext drwo = drw.RenderOpen(); //disegna una linea bianca di spessore 2 nel context del DrawingVisual: Pen myPen = new Pen(new SolidColorBrush(Color.FromArgb(255,255,255,255)), 2); drwo.DrawLine(myPen,new Point(0,0),new Point(300,300)); drwo.Close();
Funziona perfettamente (l'ho provato). Tracciando una linea, l'origine è in basso a sinistra.
- Modificato fabiocaruso sabato 3 dicembre 2022 19:15
- Proposto come risposta Plamen TimevMicrosoft contingent staff, Moderator lunedì 5 dicembre 2022 06:12
- Contrassegnato come risposta Plamen TimevMicrosoft contingent staff, Moderator mercoledì 14 dicembre 2022 14:09
Tutte le risposte
-
Ciao molokko,
Puoi inserire il codie in "Code block". Ho modificato un po' la domanda.
Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.
-
Salve a tutti. Usando un oggetto Image mi sono imbattuto nel problema di stabilire l'origine del disegno che è normalmente impostato in alto a sinistra. ho bisogno di portarlo in basso a sinistra come nei normali assi cartesiani.
l'istanza si apre con il seguente codice:
using (DrawingContext drwo = drw.RenderOpen()) e per disegnare: drwo.DrawLine(gh1, jh, hj); dove gh1 è il pennello e jh e hj sono le coordinate poi si effettua l'operazione di rendering: bmp.Render(drw); } immagine.Source = bmp; dove bmp è definito come: RenderTargetBitmap bmp = new RenderTargetBitmap(577, 577, 10, 10, PixelFormats.Pbgra32);
E' possibile ottenere il risultato ponendo nell'ordinata y il valore Image.Height-y. Penso che ci sarà un modo migliore:
La mia domanda è come ottenere il ViewPort nell'origine.
ringrazio in anticipo per l'eventuale risposta
- Modificato molokko martedì 29 novembre 2022 16:17
-
Ciao, secondo me dovresti fare una trasformazione degli assi, per porre l'origine in basso a sinistra, e invertire l'asse Y, una cosa di questo tipo:
Canvas myCanvas = new Canvas(); myCanvas.Width = 300; myCanvas.Height = 300; myCanvas.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#005588")); //inverte l'asse Y e fissa la nuova origine che così viene in basso a sinistra: myCanvas.LayoutTransform = new ScaleTransform(1,-1, 0, 0); MyGrid.Children.Add(myCanvas); DrawingVisual drw = new DrawingVisual(); DrawingContext drwo = drw.RenderOpen(); //disegna una linea bianca di spessore 2 nel context del DrawingVisual: Pen myPen = new Pen(new SolidColorBrush(Color.FromArgb(255,255,255,255)), 2); drwo.DrawLine(myPen,new Point(0,0),new Point(300,300)); drwo.Close();
Funziona perfettamente (l'ho provato). Tracciando una linea, l'origine è in basso a sinistra.
- Modificato fabiocaruso sabato 3 dicembre 2022 19:15
- Proposto come risposta Plamen TimevMicrosoft contingent staff, Moderator lunedì 5 dicembre 2022 06:12
- Contrassegnato come risposta Plamen TimevMicrosoft contingent staff, Moderator mercoledì 14 dicembre 2022 14:09