Rotation d'une image en son centre

Soyez le premier à donner votre avis sur cette source.

Vue 32 169 fois - Téléchargée 2 291 fois

Description

la fonction G.RotateTransform est très pratique pour faire tourner une image mais a le defaut d'utiliser le coin supérieur gauche de l'image que l'on veut faire tourner. Moi, je veux faire tourner l'image par rapport à son centre. Donc, je me replonge dans mes cours de géométrie, et voilà comment on fait tourner une image par rapport à son centre.

Source / Exemple :


Function Rotation(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 = PictureBox1.Image.Width
        Dim Hauteur As Integer = PictureBox1.Image.Height

        'on mémorise l'image présente dans la picture box
        Dim IMG = PictureBox1.Image

        'définition de la picturebox comme espace de dessin
        G = PictureBox1.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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

scortex84
Messages postés
379
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
20 avril 2011
1 -
Code simple et c'est les meilleurs !

Vraiment bien ! Bravo !

Seb.
cs_cbu
Messages postés
394
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
4 novembre 2009
1 -
# 'on efface
# G.Clear(Me.BackColor)

pourquoi pas mettre
G.Clear(PictureBox1.BackColor) ?
car si on met ce petit code sympatoche dans un module le Me n'est pas autorisé ..
cs_ricounet
Messages postés
51
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
26 mars 2009
-
Tout à fait d'accord !!!
olixelle
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
1 -
c pas tres bien codé qd mm.... mais ca ma bien aidé, merci :)
cs_ricounet
Messages postés
51
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
26 mars 2009
-
Cher olixelle, c'est vrai que le code est moche, MAIS le but, c'était la formule de rotation et rien d'autre !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.