Ruotare una immagine sul proprio asse centrale: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 1: | Riga 1: | ||
Per ruotare un'immagine rigorosamente intorno al proprio asse centrale, mantenendo in modo costante e coerente la sua distanza dal ''Controllo'' che contiene l'<I>oggetto</i> "Immagine" (''isometria diretta''), | Per ruotare un'immagine rigorosamente intorno al proprio asse centrale, mantenendo in modo costante e coerente la sua distanza dal ''Controllo'' che contiene l'<I>oggetto</i> "Immagine" (''isometria diretta''), utilizziamo le risorse delle Classi ''Paint'' e ''PaintBrush'' |[[#Note|1]]| e poniamo sul ''Form'' una ''DrawingArea''. | ||
La rotazione dell'immagine viene esercitata dal metodo | La rotazione dell'immagine viene esercitata dal metodo | ||
| Riga 7: | Riga 7: | ||
Nel seguente esempio pratico, una immagine sarà ruotata di 45° in senso antiorario: | Nel seguente esempio pratico, una immagine sarà ruotata di 45° in senso antiorario: | ||
'''Public''' Sub | '''Public''' Sub DrawingArea1_Draw() | ||
Dim | Dim pb As PaintBrush | ||
Dim im As Image | |||
im = Image.Load("''/percorso/dell'immagine''") | |||
With Paint | With Paint | ||
<FONT color=gray>' ''Creiamo un oggetto "PaintBrush" mediante l'immagine caricata:''</font> | <FONT color=gray>' ''Creiamo un oggetto "PaintBrush" mediante l'immagine caricata:''</font> | ||
pb = Paint.Image(im) | |||
pb.Scale(DrawingArea1.W / im.W, DrawingArea1.H / im.H) | |||
<FONT color=gray>' ''I valori associati ai parametri di questo metodo devono'' | <FONT color=gray>' ''I valori associati ai parametri di questo metodo devono'' | ||
' ''essere sempre pari alla metà della dimensione dell'immagine caricata:''</font> | ' ''essere sempre pari alla metà della dimensione dell'immagine caricata:''</font> | ||
.Translate( | .Translate(125, 125) | ||
<FONT color=gray>' ''Ruotiamo l'immagine di 45° in senso antiorario:''</font> | <FONT color=gray>' ''Ruotiamo l'immagine di 45° in senso antiorario:''</font> | ||
.Rotate(Rad(45)) | .Rotate(Rad(45)) | ||
.Translate(-125, -125) | |||
.Translate(- | .Brush = pb | ||
.Rectangle(0, 0, DrawingArea1.W, DrawingArea1.H) | |||
.Rectangle(0, 0, | |||
.Fill | .Fill | ||
.End | .End | ||
End With | End With | ||
<FONT color=gray>' ''Salviamo la nuova immagine, come ruotata:''</font> | |||
im.Save("/tmp/nuova_immagine.png", 100) | |||
'''End''' | '''End''' | ||
Versione delle 12:47, 20 nov 2014
Per ruotare un'immagine rigorosamente intorno al proprio asse centrale, mantenendo in modo costante e coerente la sua distanza dal Controllo che contiene l'oggetto "Immagine" (isometria diretta), utilizziamo le risorse delle Classi Paint e PaintBrush |1| e poniamo sul Form una DrawingArea.
La rotazione dell'immagine viene esercitata dal metodo
Paint.Rotate(Rad(valore_in_gradi))
Se si intende ruotare l'immagine in senso orario, bisognerà porre valori negativi dei gradi: Paint.Rotate(Rad(-valore_in_gradi)).
Nel seguente esempio pratico, una immagine sarà ruotata di 45° in senso antiorario:
Public Sub DrawingArea1_Draw()
Dim pb As PaintBrush
Dim im As Image
im = Image.Load("/percorso/dell'immagine")
With Paint
' Creiamo un oggetto "PaintBrush" mediante l'immagine caricata:
pb = Paint.Image(im)
pb.Scale(DrawingArea1.W / im.W, DrawingArea1.H / im.H)
' I valori associati ai parametri di questo metodo devono
' essere sempre pari alla metà della dimensione dell'immagine caricata:
.Translate(125, 125)
' Ruotiamo l'immagine di 45° in senso antiorario:
.Rotate(Rad(45))
.Translate(-125, -125)
.Brush = pb
.Rectangle(0, 0, DrawingArea1.W, DrawingArea1.H)
.Fill
.End
End With
' Salviamo la nuova immagine, come ruotata:
im.Save("/tmp/nuova_immagine.png", 100)
End
Note
[1] L'uso combinato delle Classi Paint e PaintBrush, come nell'esempio, evita che l'oggetto Image si sposti in senso verticale e/o orizzontale durante la sua rotazione, come avviene se si utilizza semplicemente il metodo .Rotate() della Classe Image .