[VB 2008] Rotations sous GDI+

cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018 - 23 mars 2009 à 22:38
cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018 - 24 mars 2009 à 11:25
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

The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
24 mars 2009 à 10:06
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
0
cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018
24 mars 2009 à 10:09
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
0
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
24 mars 2009 à 10:24
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
0
The Meteorologist Messages postés 232 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 3 novembre 2011 1
24 mars 2009 à 10:27
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018
24 mars 2009 à 11:25
Merci bien.

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

Cordialement,

KiTe
0
Rejoignez-nous