|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
[ Vb.Net 2008 ] Ruotare Immagini di X Gradi - Genymus
Salve, dovrei ruotare un'immagine di un grado ogni volta che viene premuto un bottone e con un'altro pulsante portarla a gradi 30.
è possibile? Genymus Ps: Ho già provato: Codice:
PictureBox.Image.RotateFlip(Rotate90FlipNone) PictureBox.Refresh Grazie
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
...
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Per poter ruotare un oggetto grafico di X gradi a piacere, bisogna per forza scomodare le GDI+, inoltre con l'utilissima classe System.Drawing.Drawing2D.Matrix, posso applicare trasformazioni geometriche, inclusa la rotazione attorno ad un punto di coordinate opportune ( nel mio caso, il centro del parallelogramma-immagine ).
Sul Web ci sono vari esempi di gente che ha risolto il problema con un autentico "fiume di codice" ( rotazione, una bella dose di trigonometria, e poi definizione caso per caso dei vertici ( PointF ) del disegno... ![]() La mia soluzione è invece questa, spero sarai in grado di apprezzarla ( ![]() > Una Function, che riceve in ingresso la bitmap che si desidera ruotare, l'angolo, il colore da dare alle regioni esterne che si vengono ovviamente a creare a causa della rotazione, e produce in uscita la nuova Bmp ruotata, che chiaramente sarà più grande di quella originale. La Function inoltre non fa nessun uso "furbo" di oggetti dell'interfaccia grafica WinForms, come PictureBox ecc... : Codice:
Private Function RotazioneBMP(ByVal BMPInput As Bitmap, ByVal angoloRotazione As Single, ByVal coloreSfondo As Brush) As Bitmap 'Angolo di rotazione desiderato Dim radianti As Double = angoloRotazione * Math.PI / 180 'Dimensioni di BMPInput Dim bmpW As Integer = BMPInput.Width Dim bmpH As Integer = BMPInput.Height 'Bitmap di output 'Dimensioni Dim bmpOutW As Integer = bmpW * Math.Abs(Math.Cos(radianti)) + bmpH * Math.Abs(Math.Sin(radianti)) Dim bmpOutH As Integer = bmpH * Math.Abs(Math.Cos(radianti)) + bmpW * Math.Abs(Math.Sin(radianti)) Dim BMPOutput As New Bitmap(bmpOutW, bmpOutH) Dim G As Graphics = Graphics.FromImage(BMPOutput) 'Colore di sfondo per le regioni esterne G.FillRectangle(coloreSfondo, 0, 0, bmpOutW, bmpOutH) 'Disegno / Rotazione di BMPInput su BMPOutput Dim M As New System.Drawing.Drawing2D.Matrix M.RotateAt(angoloRotazione, New PointF(bmpOutW / 2, bmpOutH / 2)) 'Centro della rotazione G.Transform = M G.DrawImage(BMPInput, CInt((bmpOutW - BMPInput.Width) / 2), CInt((bmpOutH - BMPInput.Height) / 2)) Return BMPOutput End Function Codice:
Private Sub nup_angolo_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nup_angolo.ValueChanged PictureBox1.Image = RotazioneBMP(BMP, nup_angolo.Value, Brushes.Red) End Sub Codice:
Private BMP As New Bitmap(percorso & "test.bmp") ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Grazie...
Una Domanda... dovrei ruotare un'immagine sopra un'altra... e ho bisogno quindi che questa sia png per lo sfondo trasparente... il codice che mi ha dato può usare anche png? Grazie Genymus
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Lei mi salva la vita...
Appena possibile entro in windows e provo... Grazie e Buona Domenica Genymus
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
mi scuso... do sempre del lei a chiunque, mi hanno educato in questo modo.
Quote:
Genymus
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:28.