Rotation d'images

Résolu
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 - 16 août 2005 à 17:39
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 17 août 2005 à 14:15
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 :(

9 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 août 2005 à 14:07
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
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
17 août 2005 à 09:34
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 août 2005 à 09:37
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 août 2005 à 09:38
raaaah... pas assez rapide


<HR>
Sébastien FERRAND

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

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

Posez votre question
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 13:55
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 ?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 août 2005 à 13:59
il faut faire le drawstring avant la rotation...


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 14:05
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();
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 14:11
ouf merci !
ca marche mieux, les images sont enfin verticales, mais le texte est coupé; je m'y penche dessus... Merci beacoup !
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
17 août 2005 à 14:15
é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
0
Rejoignez-nous