Comment écrire du texte vertical ?

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 967 fois - Téléchargée 26 fois

Contenu du snippet

Il est souvent demandé, lorsque des histogrammes doivent être affichés, d?écrire du texte verticalement. Or, rien n?est prévu dan le framework pour faire cela ! La seule solution est de créer une image du texte à afficher, puis de la faire pivoter?
Pour écrire du texte verticalement, la seule solution est de transformer ce texte en image et de faire pivoter cette image de 90°, comme ceci :

Source / Exemple :


string message = "Mon texte à afficher";

// Création de l'image
Bitmap b = new Bitmap(1, 1);
Font f = new Font("Arial", 8);
Graphics graphics = Graphics.FromImage(b);			
int width = (int) graphics.MeasureString(message,f).Width;
int height = (int) graphics.MeasureString(message,f).Height;
b = new Bitmap(b, new Size(height, width));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
			
// Création du texte de l'image
StringFormat sf = StringFormat.GenericTypographic;
sf.FormatFlags = StringFormatFlags.DirectionVertical;	// Position verticale
graphics.DrawString(message, f, new SolidBrush(Color.FromArgb(62, 62, 62)), 0, 0, sf);
graphics.Flush();

// Enregistrement de l'image
string directory = System.Configuration.ConfigurationSettings.AppSettings["installPath"];
message = message.Replace(" ", "");
directory += @"\Images\Generated\" + message + ".gif";
b.Save(directory, System.Drawing.Imaging.ImageFormat.Gif);

Conclusion :


L?image est créée en fonction du texte à écrire. Cette image doit ensuite être enregistrée sur le disque dur du serveur, ce qui nécessite de donner les bons droits d?accès à ce répertoire.

A voir également

Ajouter un commentaire

Commentaires

cs_badrbadr
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008
-
interresante ta méthode, mais je pense bien que le framework .net a prevu qqch pour ces situations-la, je m'explique:

voici une fonction que j'avais trouver sur msdn qui ecrit du texte vertical:

private void DrawVerticalText()
{
System.Drawing.Graphics formGraphics = this.CreateGraphics();
string drawString = "Sample Text";
System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16);
System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
float x = 150.0f;
float y = 50.0f;
System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical);
formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
drawFont.Dispose();
drawBrush.Dispose();
formGraphics.Dispose();
}

tout se joue dans le format du string
System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical);
avec le flag StringFormatFlags.DirectionVertical

en tout cas, ton code nous apprend a faire d autre chose comme par exemple comment dessiner ou ecrire dans une image.

bonne contuniation
bucherb
Messages postés
412
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
13 août 2007
-
Tu peux aussi utiliser tourner ton objet Graphics par la propriété "Transform" en lui passant un objet Matrix (qui contient tout ce qu'il faut pour faire des transformations), puis faire ton DrawString normalement et ensuite rétablit ton Graphics en faisant ResetTransform... Ca a l'avantage de pouvoir écrire du texte selon n'importe quel angle.
ahaccoun
Messages postés
4
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
15 septembre 2008
-
j'ai fait comme ceci:

private static void drawVerticalString(string text, Point p, Font font, Form myForm)
{
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
gp.AddString(text, font.FontFamily, (int)font.Style, font.Size+4, p, StringFormat.GenericTypographic);
System.Drawing.Drawing2D.Matrix m = new System.Drawing.Drawing2D.Matrix();
m.RotateAt(270, p, System.Drawing.Drawing2D.MatrixOrder.Append);
gp.Transform(m);
myForm.CreateGraphics().FillPath(new SolidBrush(Color.Black), gp);
}
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
salut,
3 méthode pour le prix d'une seule ,
merci

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.