6

I am using c# 2005 i want to write string diagonally on image. But by default c# provides the option to write horizontally or vertically.

how we write diagonally?

Thanks

Mihai Limbășan
  • 64,368
  • 4
  • 48
  • 59
SelvirK
  • 925
  • 3
  • 18
  • 42

5 Answers5

9

You can use the RotateTransform and TranslateTransform that are available on the Graphics class. Because using DrawString is GDI+ the transforms affects the drawing. So use something like this...

g.RotateTransform(45f);
g.DrawString("My String"...);
g.RotateTransform(-45f);

Don't forget to reverse the change though!

Phil Wright
  • 22,580
  • 14
  • 83
  • 137
7

Do a Graphics.rotateTransform before the drawString call. Don't forget to reverse the change afterwards, as Phil Wright points out.

moonshadow
  • 86,889
  • 7
  • 82
  • 122
1

You can use this function.

   void DrawDigonalString(Graphics G, string S, Font F, Brush B, PointF P, int Angle)
   {
       SizeF MySize = G.MeasureString(S, F);
       G.TranslateTransform(P.X + MySize.Width / 2, P.Y + MySize.Height / 2);
       G.RotateTransform(Angle);
       G.DrawString(S, F, B, new PointF(-MySize.Width / 2, -MySize.Height / 2));
       G.RotateTransform(-Angle);
       G.TranslateTransform(-P.X - MySize.Width / 2, -P.Y- MySize.Height / 2);
   }

Like this

enter image description here

a d
  • 552
  • 2
  • 7
  • 17
  • Works like a charm! But how can I determine the width of the angled text? e.g. if I have a string width of 50. After rotating the text, it'll take less width... – prototype0815 Jan 05 '18 at 07:19
0

u have right..It can be done in that way..BUT text will be written from top to bottom always and I'm not sure u can change it from bottom to top.. cheers

Ewoks
  • 12,285
  • 8
  • 58
  • 67
-1

There is another way to draw a text vertically which is built in the C#. There is no need of explicit graphics transformation. You can use the StringFormat class. Here is a sample code which draws a text vertically:

StringFormat sf = new StringFormat(); sf.FormatFlags = StringFormatFlags.DirectionVertical; e.Graphics.DrawString("My String", this.Font, Brushes.Black, PointF.Empty, sf);

Chris Hughes
  • 717
  • 5
  • 2