[VB 2008] Rotations sous GDI+

Signaler
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018
-
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018
-
Bonjour,

Dans le cadre d'un développement assez pressant, je dois trouver comment réaliser une rotation d'un objet (polygone, texte ou autre) autour de son centre avec un angle allant de 0 à 360°.

Dans la pratique, cela se résume donc à faire tourner sur eux mêmes divers éléments graphiques.

Or, les membres  "rotateFlip" de la classe bitmap ne conviennent pas car limités a des angles spécifiques, et le membre rotateTransform de la classe graphics semble n'offrir des rotations qu'autour du point de coordonnées (0;0), soit le point en haut a gauche de l'image en rotation.

Quelqu'un connaitrait-il donc un moyen d'arriver a générer des rotations telles que je le souhaite (autour du centre de l'objet)? Y-a-t-il des choses a faire avant d'utiliser le rotateTransform afin de choisir un point de rotation soit même?

Pour infos, voici le code actuellement utilisé, pour que vous puissiez voir le résultat que j'obtient actuellement :

        Dim b As Bitmap = New Bitmap(100, 100)
        Dim g As Graphics = Graphics.FromImage(b)

        angle = CSng((angle + 1) Mod 360)
        g.RotateTransform(angle)

             g.DrawString("TEST", New Font(FontFamily.GenericMonospace, 20, FontStyle.Bold, GraphicsUnit.Pixel), Brushes.Blue, 0, 0)
        Me.PictureBox1.Image = b
        g.Dispose()

En espérant avoir été clair et avoir une piste,

Cordialement,

KiTe.

5 réponses

Messages postés
233
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
Kite37, une simple recherche du mot "rotation" sur le moteur de recherche du site t'aurais sûrement aidé ;)

http://www.vbfrance.com/codes/ROTATION-IMAGE-SON-CENTRE_33250.aspx
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018

wooaaah merci beaucoup !

j'avoue que je n'ai pas pris le temps de faire la recherche étant donné que je passe mes journées en cours et que je n'ai qu'un accès limité le soir ^^.

Désolé d'avoir posé une question inutile et merci à toi d'avoir répondu malgré tout, je vais me pencher dès que possible sur ce code.

Cordialement,

KiTe
Messages postés
233
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
Tiens, il y a une petite erreur dans le code qui risque de te faire perdre du temps si tu n'as pas lu les commentaires ;).

Remplace:

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

Par:

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

Simon
Messages postés
233
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
Excuse-moi je me suis trompé de ligne --' c'est bien sûr cette ligne qu'il faut corriger :

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

en

Dim PosY As Single = -Math.Sqrt(2) * (Hauteur) * Math.Sin(Angle / 2) * Math.Cos(Math.PI / 4 - Angle / 2)
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018

Merci bien.

Je vais essayer de comprendre les manipulations géométriques au passage ^^

Cordialement,

KiTe