1217meyrin
Messages postés159Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention 6 février 2007
-
11 sept. 2006 à 17:51
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
12 sept. 2006 à 18:47
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)
Private
Sub AxTransPictureCtl1_MouseUpEvent(
ByVal sender
As
Object,
ByVal e
As AxTransPicture.__TransPictureCtl_MouseUpEvent)
Handles AxTransPictureCtl1.MouseUpEvent
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 12 sept. 2006 à 00:31
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