Rotation d'images [Résolu]

Signaler
Messages postés
142
Date d'inscription
jeudi 10 février 2005
Statut
Membre
Dernière intervention
2 octobre 2008
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour !
j'aimerais pouvoir tourner une image générée en C# de 90 degres. Bien qu'il y ai les fonctions pour faire cela, je n'y arrive pas !! :-s
Voici mon code :
b = new Bitmap(b, new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.DrawString(message, f, new SolidBrush(Color.Black), 0, 0);
graphics.Transform.Rotate(90);
graphics.Flush();

...et rien n'y fait, l'image reste désespérément horizontale. Sauriez vous pourquoi ? J'ai également essayé de faire graphics.RotateTransform(90) mais ca ne marche pas non plus :(
A voir également:

9 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
sinon teste ca :

StringFormat sf = StringFormat.GenericTypographic;
sf.FormatFlags |= StringFormatFlags.DirectionVertical;
graphics.DrawString(message, f, new SolidBrush(Color.Black), 0, 0, sf);


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Hello,

C'est ton Bitmap qui détermine la position de ton image. Si tu fait une rotation, c'est comme si tu tournait la feuille sur laquelle tu dessine, mais en sachant que lors de l'affichge, le bitmap est remis droit. Il faut donc tourner avant de desiner :

b = new Bitmap(b, new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.Transform.Rotate(90);
graphics.DrawString(message, f, new SolidBrush(Color.Black), 0, -20);

Il faut faire atention aux coordonnées :

Avant la transformation Après

......
. .
. .
. .
. .
. .
. .
----------->X........ ----------->X
| . |
| Ta feuille . |
V.................... V
Y Y

C'est pour ça que j'ai mis le -20 en Y, autrement, le message n'apparaît pas.

J'espère que c'est clair, autrement, n'hésite pas.
Amicalement, SharpMao
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
je fais comme ca moi :

graphics.RotateTransform(90.0F, MatrixOrder.Append);
graphics.TranslateTransform(this.Width, this.Height, MatrixOrder.Append);

voir source : http://www.csharpfr.com/code.aspx?ID=29638


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
raaaah... pas assez rapide


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
142
Date d'inscription
jeudi 10 février 2005
Statut
Membre
Dernière intervention
2 octobre 2008
2
Merci à tous les 2, mais je n'y arrive toujours pas... Voici mon code :


b =
new Bitmap(b,
new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);

graphics.RotateTransform(90.0F, MatrixOrder.Append);
graphics.TranslateTransform(width, height, MatrixOrder.Append);
graphics.DrawString(message, f,
new SolidBrush(Color.Black), 0, 0);
graphics.Flush();

J'ai aussi essayé ca :

b = new Bitmap(b,
new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);

graphics.Transform.Rotate(90);

graphics.DrawString(message, f, new SolidBrush(Color.Black), 0, 0);
graphics.Flush();

...mais rien en marche... Vous ne sauriez pas pourquoi par hasard ?
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
il faut faire le drawstring avant la rotation...


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
Messages postés
142
Date d'inscription
jeudi 10 février 2005
Statut
Membre
Dernière intervention
2 octobre 2008
2
Et non...ca marche toujours pas :(


b =
new Bitmap(b,
new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.DrawString(message, f,
new SolidBrush(Color.Black), 0, 0);
graphics.Transform.Rotate(90);

graphics.Flush();


b =
new Bitmap(b,
new Size(width, height));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.DrawString(message, f,
new SolidBrush(Color.Black), 0, 0);

graphics.RotateTransform(90.0F, MatrixOrder.Append);
graphics.TranslateTransform(width, height, MatrixOrder.Append);
graphics.Flush();
Messages postés
142
Date d'inscription
jeudi 10 février 2005
Statut
Membre
Dernière intervention
2 octobre 2008
2
ouf merci !
ca marche mieux, les images sont enfin verticales, mais le texte est coupé; je m'y penche dessus... Merci beacoup !
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
33
étudie ma source tu verras comment j'ai fait pour mettre le texte dans tous les sens...


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate