If you want to draw rotated text at the center of the image, then offset the location of the text by half the measured size of the text:
using (Font font = new Font("Arial", 80, FontStyle.Bold))
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
float w = pictureBox1.Image.Width / 2f;
float h = pictureBox1.Image.Height / 2f;
g.TranslateTransform(w, h);
g.RotateTransform(90);
SizeF size = g.MeasureString("Hello world", font);
PointF drawPoint = new PointF(-size.Width / 2f, -size.Height / 2f);
g.DrawString("Hello world", font, Brushes.White, drawPoint);
}
pictureBox1.Refresh();
(It's a good idea to dispose of Font
and Graphics
objects when you're done with them, so I've added a couple using
statements.)
Variation #1: This snippet positions the upper-left corner of the text at (400, 200) and then rotates the text around that point:
g.TranslateTransform(400, 200);
g.RotateTransform(90);
PointF drawPoint = new PointF(0, 0);
g.DrawString("Hello world", font, Brushes.White, drawPoint);
Variation #2: This snippet positions the upper-left corner of the text at (400, 200) and then rotates the text around the center of the text:
SizeF size = g.MeasureString("Hello world", font);
g.TranslateTransform(400 + size.Width / 2, 200 + size.Height / 2);
g.RotateTransform(90);
PointF drawPoint = new PointF(-size.Width / 2, -size.Height / 2);
g.DrawString("Hello world", font, Brushes.White, drawPoint);