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" | Per ruotare un'immagine rigorosamente intorno al proprio asse centrale (''isometria diretta''), mantenendo in modo costante e coerente la sua distanza dal ''Controllo'' che contiene l'<I>oggetto</i> "Immagine", possiamo adottare almeno due modalità. | ||
==Uso della DrawingArea== | |||
Con questa modalità 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 44: | Riga 48: | ||
End With | End With | ||
'''End''' | |||
==Uso di una PictureBox== | |||
Quest'altra modalità prevede che sul ''Form'' sia posta una ''PictureBox'', nella quale viene creata un'immagine trasparente sufficientemente grande a contenere le dimensioni, dopo apposita trasposizione su di essa, dell'immagine che dovrà essere ruotata. La creazione di questa immagine trasparente, che farà da supporto all'immagine che dovrà ruotare, è necessaria per poter porre l'immagine da ruotare in un punto qualsiasi da noi scelto all'interno della ''PictureBox''. | |||
'''Public''' Sub Form_Open() | |||
Dim im, imm As Image | |||
Dim i, j As Integer | |||
Me.Show | |||
<FONT Color=gray>' ''Generiamo un'immagine trasparente in questo caso grande quanto la "PictureBox":''</font> | |||
imm = New Image(PictureBox1.W, PictureBox1.H, &FF000000) | |||
While True | |||
Inc j | |||
im = Image.Load("''/pecorso/dell'immagine/da/ruotare''") | |||
im = im.Rotate(Rad(j)) | |||
If j Mod 3 = 0 Then | |||
Select Case j | |||
Case 1 To 45 | |||
Inc i | |||
Case 46 To 90 | |||
Dec i | |||
Case 91 To 135 | |||
Inc i | |||
Case 136 To 180 | |||
Dec i | |||
Case 181 To 225 | |||
Inc i | |||
Case 226 To 270 | |||
Dec i | |||
Case 271 To 315 | |||
Inc i | |||
Case 316 To 360 | |||
Dec i | |||
End Select | |||
Endif | |||
imm.DrawImage(im, 100 - i, 100 - i) | |||
PictureBox1.Picture = imm.Picture | |||
Wait 0.001 | |||
If j = 361 Then j = 1 | |||
Wend | |||
'''End''' | '''End''' | ||
Versione delle 04:03, 21 nov 2014
Per ruotare un'immagine rigorosamente intorno al proprio asse centrale (isometria diretta), mantenendo in modo costante e coerente la sua distanza dal Controllo che contiene l'oggetto "Immagine", possiamo adottare almeno due modalità.
Uso della DrawingArea
Con questa modalità 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:
Private im As Image
Public Sub Form_Open()
im = Image.Load("/percorso/dell'immagine")
' Rendiamo la "DrawingArea" delle medesime dimensioni dell'immagine caricata:
With DrawingArea1
.W = im.W
.h = im.H
End With
End
Public Sub DrawingArea1_Draw()
Dim pb As PaintBrush
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
End
Uso di una PictureBox
Quest'altra modalità prevede che sul Form sia posta una PictureBox, nella quale viene creata un'immagine trasparente sufficientemente grande a contenere le dimensioni, dopo apposita trasposizione su di essa, dell'immagine che dovrà essere ruotata. La creazione di questa immagine trasparente, che farà da supporto all'immagine che dovrà ruotare, è necessaria per poter porre l'immagine da ruotare in un punto qualsiasi da noi scelto all'interno della PictureBox.
Public Sub Form_Open()
Dim im, imm As Image
Dim i, j As Integer
Me.Show
' Generiamo un'immagine trasparente in questo caso grande quanto la "PictureBox":
imm = New Image(PictureBox1.W, PictureBox1.H, &FF000000)
While True
Inc j
im = Image.Load("/pecorso/dell'immagine/da/ruotare")
im = im.Rotate(Rad(j))
If j Mod 3 = 0 Then
Select Case j
Case 1 To 45
Inc i
Case 46 To 90
Dec i
Case 91 To 135
Inc i
Case 136 To 180
Dec i
Case 181 To 225
Inc i
Case 226 To 270
Dec i
Case 271 To 315
Inc i
Case 316 To 360
Dec i
End Select
Endif
imm.DrawImage(im, 100 - i, 100 - i)
PictureBox1.Picture = imm.Picture
Wait 0.001
If j = 361 Then j = 1
Wend
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 .