Ruotare un'immagine sul proprio asse centrale in una DrawingArea

Da Gambas-it.org - Wikipedia.

Nel caso in cui si debba far ruotare in una DrawingArea un'immagine sul proprio asse centrale, sia essa quadrata o rettangolare, si potrà adottare il seguente codice:

Private DrawingArea1 As DrawingArea
Private im As Image
Private c As Short

Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With
 DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
 
 im = Image.Load("/percorso/della/immagine")
 
End

Public Sub DrawingArea1_MouseUp()   ' Cliccando sulla "DrawingArea", si avvierà la rotazione dell'immagine

 While Object.IsValid(DrawingArea1)
   c += 10
   DrawingArea1.Refresh
   Wait 0.1
 wend

End

Public Sub DrawingArea1_Draw()

 With Paint
' Pone il centro di rotazione al centro della "DrawingArea".
' Il fulcro del Metodo ".Translate()" agisce da centro di rotazione intorno a una ipotetica circonferenza.
   .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
   .Rotate(Rad(c))
   .DrawImage(im, -im.W / 2, -im.H / 2, im.W, im.H, 1.0, Null)
   .End
 End With

End