Draw vertical text?

  • Thread starter Thread starter Mark B
  • Start date Start date
M

Mark B

I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?
 
Mark B said:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

You can use the overload of DrawString which accepts the StringFormat
object.
Set the StringFormatFlags Property of StringFormat object to
StringFormatFlags.Direction Vertical.

Example Code:-

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;

public class Form1 : System.Windows.Forms.Form
{
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Text = "";
this.Resize += new System.EventHandler(this.Form1_Resize);
this.Paint += new
System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

}
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);

String s = "HELLO";
StringFormat sf = new
StringFormat(StringFormatFlags.DirectionVertical);
Font f = new Font("Times New Roman", 14);

SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf);

RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height);
g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height);
g.DrawString(s, f, Brushes.Black, rf, sf);

f.Dispose();
}

private void Form1_Resize(object sender, System.EventArgs e)
{
Invalidate();
}
}
 
Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
degrees (which is not what I want)?
 
Mark said:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

Hi Mark, this will do what you require ( put it in the Paint event handler

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
String s = "HELLO";
Font f = new Font("Times New Roman", 14);

float x = 150.0F;
float y = 50.0F;

for (int i = 0; i < s.Length; i++)
{
g.DrawString(s.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
A slight improvement can be to Measure the Height of Font and then Increment
Y with appropriate value.

Pete Kane said:
Mark said:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

Hi Mark, this will do what you require ( put it in the Paint event handler

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
String s = "HELLO";
Font f = new Font("Times New Roman", 14);

float x = 150.0F;
float y = 50.0F;

for (int i = 0; i < s.Length; i++)
{
g.DrawString(s.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
Just 2 Lines Code

string s = "HELLO";
e.Graphics.DrawString("HELLO", this.Font, Brushes.Black, new
RectangleF(10, 10, this.Font.Size, this.Font.Height * s.Length));

:-)
 
Manu formulated on woensdag :
Just 2 Lines Code

string s = "HELLO";
e.Graphics.DrawString("HELLO", this.Font, Brushes.Black, new
RectangleF(10, 10, this.Font.Size, this.Font.Height * s.Length));

What would that do if the string was "Hello", with an Arial font? I'm
guessing that the "ll" will be on one line, as together they will be
about as big as the single "H". Or try "Well".

Hans Kesting
 
Thanks very much.

I am planning to used Arial but also the variable will be in 34 different
languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be
OK. I guess it should since all characters will fall inside a set character
height. A few may have plenty of room (e.g. Arabic) but hopefully it will
still look OK.


Pete Kane said:
Mark said:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

Hi Mark, this will do what you require ( put it in the Paint event handler

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
String s = "HELLO";
Font f = new Font("Times New Roman", 14);

float x = 150.0F;
float y = 50.0F;

for (int i = 0; i < s.Length; i++)
{
g.DrawString(s.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
I am planning to used Arial but also the variable will be in 34 different
languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be
OK. I guess it should since all characters will fall inside a set character
height. A few may have plenty of room (e.g. Arabic) but hopefully it will
still look OK.

Doing this with something like Arabic is not going to work.
 
I am planning to used Arial but also the variable will be in 34 different
languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be
OK.

Magic numbers are always to be avoided. Write the extra code to measure....
 
Mark said:
Thanks very much.

I am planning to used Arial but also the variable will be in 34
different languages including Chinese, Arabic, Korean etc. So I hope y
+= 20 will be OK. I guess it should since all characters will fall
inside a set character height. A few may have plenty of room (e.g.
Arabic) but hopefully it will still look OK.


Pete Kane said:
Mark said:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

Hi Mark, this will do what you require ( put it in the Paint event
handler

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
String s = "HELLO";
Font f = new Font("Times New Roman", 14);

float x = 150.0F;
float y = 50.0F;

for (int i = 0; i < s.Length; i++)
{
g.DrawString(s.ToString(), f, Brushes.Black,x,y);
y += 20;
}



Hi Mark, just for completeness this line should replace the magic number
'20'

y+= f.GetHeight();

regards
 
Thanks

Pete Kane said:
Mark said:
Thanks very much.

I am planning to used Arial but also the variable will be in 34 different
languages including Chinese, Arabic, Korean etc. So I hope y += 20 will
be OK. I guess it should since all characters will fall inside a set
character height. A few may have plenty of room (e.g. Arabic) but
hopefully it will still look OK.


Pete Kane said:
Mark B wrote:
I want to draw some text (the string value of a variable) on an image:

H
E
L
L
O

Does anyone know how to do this (e.g. using g.DrawString)?

Hi Mark, this will do what you require ( put it in the Paint event
handler

Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
String s = "HELLO";
Font f = new Font("Times New Roman", 14);

float x = 150.0F;
float y = 50.0F;

for (int i = 0; i < s.Length; i++)
{
g.DrawString(s.ToString(), f, Brushes.Black,x,y);
y += 20;
}



Hi Mark, just for completeness this line should replace the magic number
'20'

y+= f.GetHeight();

regards
 
Back
Top