Home All Groups Group Topic Archive Search About
Author
17 Dec 2008 10:04 AM
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)?

Author
17 Dec 2008 10:23 AM
Manu
"Mark B" <none***@none.com> wrote in message
news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl...
>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();
    }
  }
Are all your drivers up to date? click for free checkup

Author
17 Dec 2008 10:30 AM
Mark B
Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
degrees (which is not what I want)?


Show quoteHide quote
"Manu" <manu.is***@gmail.com> wrote in message
news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com...
>
> "Mark B" <none***@none.com> wrote in message
> news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl...
>>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();
>    }
>  }
>
Author
17 Dec 2008 11:25 AM
Manu
Opps I did'nt See that you dont want to rotate text.
Show quoteHide quote
"Mark B" <none***@none.com> wrote in message
news:ODmrCKDYJHA.1532@TK2MSFTNGP03.phx.gbl...
> Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
> degrees (which is not what I want)?
>
>
> "Manu" <manu.is***@gmail.com> wrote in message
> news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com...
>>
>> "Mark B" <none***@none.com> wrote in message
>> news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl...
>>>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();
>>    }
>>  }
>>
>
Author
17 Dec 2008 11:39 AM
Manu
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));

Show quoteHide quote
:-)
"Mark B" <none***@none.com> wrote in message
news:ODmrCKDYJHA.1532@TK2MSFTNGP03.phx.gbl...
> Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
> degrees (which is not what I want)?
>
>
> "Manu" <manu.is***@gmail.com> wrote in message
> news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com...
>>
>> "Mark B" <none***@none.com> wrote in message
>> news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl...
>>>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();
>>    }
>>  }
>>
>
Author
17 Dec 2008 2:16 PM
Hans Kesting
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
Author
17 Dec 2008 11:07 AM
Pete Kane
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[i].ToString(), f, Brushes.Black,x,y);
      y += 20;
}
Author
17 Dec 2008 11:27 AM
Manu
A slight improvement can be to Measure the Height of Font and then Increment
Y with appropriate value.

Show quoteHide quote
"Pete Kane" <pk***@uku.co.uk> wrote in message
news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl...
> 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[i].ToString(), f, Brushes.Black,x,y);
>      y += 20;
> }
Author
17 Dec 2008 8:01 PM
Mark B
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.


Show quoteHide quote
"Pete Kane" <pk***@uku.co.uk> wrote in message
news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl...
> 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[i].ToString(), f, Brushes.Black,x,y);
>      y += 20;
> }
Author
18 Dec 2008 2:36 AM
Mihai N.
> 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.


--
Mihai Nita [Microsoft MVP, Visual C++]
http://www.mihai-nita.net
------------------------------------------
Replace _year_ with _ to get the real email
Author
18 Dec 2008 2:36 AM
Jeff Johnson
"Mark B" <none***@none.com> wrote in message
news:etG0DJIYJHA.1328@TK2MSFTNGP02.phx.gbl...

> 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....
Author
18 Dec 2008 10:22 AM
Pete Kane
Jeff Johnson wrote:
> "Mark B" <none***@none.com> wrote in message
> news:etG0DJIYJHA.1328@TK2MSFTNGP02.phx.gbl...
>
>> 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....
>
>
I quite agree - I was merely showing the OP the way
Author
18 Dec 2008 11:32 AM
Pete Kane
Mark B wrote:
Show quoteHide quote
> 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" <pk***@uku.co.uk> wrote in message
> news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl...
>> 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[i].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
Author
18 Dec 2008 11:45 AM
Mark B
Thanks

Show quoteHide quote
"Pete Kane" <pk***@uku.co.uk> wrote in message
news:OX4gRRQYJHA.256@TK2MSFTNGP06.phx.gbl...
> Mark B wrote:
>> 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" <pk***@uku.co.uk> wrote in message
>> news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl...
>>> 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[i].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
>

Bookmark and Share