Differenze tra le versioni di "Ruotare una immagine sul proprio asse centrale"

Da Gambas-it.org - Wikipedia.
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''), possiamo utilizzare le risorse delle Classi ''Paint'' e ''PaintBrush''. |[[#Note|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''), 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 Button1_Click()
+
  '''Public''' Sub DrawingArea1_Draw()
 
   
 
   
   Dim immago As Image
+
   Dim pb As PaintBrush
 +
  Dim im As Image
 
    
 
    
   immago = Image.Load("''/percorso/dell'immagine''")
+
   im = Image.Load("''/percorso/dell'immagine''")
 
   
 
   
 
   With Paint
 
   With Paint
 
    .Begin(immago)
 
 
 
  <FONT color=gray>' ''Creiamo un oggetto "PaintBrush" mediante l'immagine caricata:''</font>
 
  <FONT color=gray>' ''Creiamo un oggetto "PaintBrush" mediante l'immagine caricata:''</font>
     .Brush = .Image(immago)
+
     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(immago.W \ 2, immago.H \ 2)
+
     .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(- immago.W \ 2, - immago.H \ 2)
+
    .Brush = pb
 
+
     .Rectangle(0, 0, DrawingArea1.W, DrawingArea1.H)
     .Rectangle(0, 0, immago.W, immago.H)
 
 
 
 
     .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)
 
   
 
   
<FONT color=gray>' ''Mostriamo l'immagine, come ruotata, nella "PictureBox":''</font>
 
  PictureBox1.Picture = immago.Picture
 
 
<FONT color=gray>' ''Salviamo la nuova immagine, come ruotata, nell'HD:''</font>
 
  immago.Save("/tmp/nuova_immagine.png", 100)
 
 
 
 
  '''End'''
 
  '''End'''
 +
  
  

Versione delle 11: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 .