Rotation

Messages postés
159
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
6 février 2007
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,
voilà un bout de code qui execute une rotation d'un picturebox, mais l'image initiale reste tout le temps, comment faire pour la faire disparaitre?.

code:
Function

Rotation1(
ByVal AngleDegre
As
Integer)

Dim G
As Graphics

'on mémorise la longueur de l'image

'je pars de l'hypothèse que j'utilise une image carré

Dim Largeur
As
Integer = AxTransPictureCtl1.Picture.Width

Dim Hauteur
As
Integer = AxTransPictureCtl1.Picture.Height

'on mémorise l'image présente dans la picture box

Dim IMG = AxTransPictureCtl1.Picture

'définition de la picturebox comme espace de dessin G = AxTransPictureCtl1.CreateGraphics()

'on efface

'G.Clear(Me.BackColor)

'on transforme l'angle en radians

Dim Angle
As
Double = AngleDegre / 180 * Math.PI

'on calcule les nouvelles coord X et Y de l'image

Dim PosX
As
Single = Math.Sqrt(2) * (Largeur) * Math.Sin(Angle / 2) * Math.Cos(Math.PI / 4 + Angle / 2)

Dim PosY
As
Single = -Math.Sqrt(2) * (Largeur) * Math.Sin(Angle / 2) * Math.Cos(Math.PI / 4 - Angle / 2)

'on fait la rotation G.RotateTransform(AngleDegre)

'on dessine l'image rotée aux nouvelles coordonnées G.DrawImage(IMG, PosX, PosY, Largeur, Hauteur)

'on libère ! G.Dispose()

End
Function 

Private
Sub AxTransPictureCtl1_MouseUpEvent(
ByVal sender
As
Object,
ByVal e
As AxTransPicture.__TransPictureCtl_MouseUpEvent)
Handles AxTransPictureCtl1.MouseUpEvent

If e.button = 1
Then

For i = angle1
To angle1 + 90Rotation1(i)

'Sleep(10)

Next iangle1 = angle1 + 90

ElseIf e.button = 2
Then

For j = angle1
To angle1 - 90
Step -1Rotation1(j)

'Sleep(10)

Next jangle1 = angle1 - 90

End
If

End
Sub

2 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
J'ai rajouté un
G.Clear(AxTransPictureCtl1.BackColor)
avant le G.Draw et l'image initiale est effacée...
Mais je vois en commentaire un G.Clear(Me.BackColor) en commentaire... Donc j'imagine que tu as déjà essayé ?

Julien.

PS : J'ai utilisé ton code un peu autrement dans le Paint de la pictursBox, peut-être est-ce à cause de ca mais je vois pas le rapport ? Je te colle mes modifs ici, ma pictureBox s'appelle Pic, et j'utilise un timer à 40 pour actualiser l'image...

Private Sub Pic_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Pic.Paint

Dim AngleDegre As Single = DateAndTime.Timer * 100

'on mémorise la longueur de l'image

'je pars de l'hypothèse que j'utilise une image carrée

Dim Largeur As Integer = Pic.Image.Width

Dim Hauteur As Integer = Pic.Image.Height

'on mémorise l'image présente dans la picture box

Dim IMG As System.Drawing.Image = Pic.Image

Dim Angle As Double = AngleDegre / 180 * Math.PI

'on calcule les nouvelles coord X et Y de l'image

Dim PosX As Single = Math.Sqrt(2) * (Largeur) * Math.Sin(Angle / 2) * Math.Cos(Math.PI / 4 + Angle / 2)

Dim PosY As Single = -Math.Sqrt(2) * (Largeur) * Math.Sin(Angle / 2) * Math.Cos(Math.PI / 4 - Angle / 2)

'on fait la rotation
e.Graphics.Clear(Pic.BackColor)
e.Graphics.RotateTransform(AngleDegre)

'on dessine l'image rotée aux nouvelles coordonnées

e.Graphics.DrawImage(IMG, PosX, PosY, Largeur, Hauteur)
End Sub

Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tmr.Tick
Pic.Refresh()
End Sub
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14