Как повернуть текст в GDI +? - PullRequest
11 голосов
/ 12 декабря 2010

Я хочу отобразить данную строку под определенным углом.Я пытался сделать это с классом System.Drawing.Font.Вот мой код:

Font boldFont = new Font(FontFamily.GenericSansSerif, 12, FontStyle.Bold, GraphicsUnit.Pixel, 1, true);<br> graphics.DrawString("test", boldFont, textBrush, 0, 0);

Кто-нибудь может мне помочь?

Ответы [ 3 ]

15 голосов
/ 12 декабря 2010
String theString = "45 Degree Rotated Text";
SizeF sz = e.Graphics.VisibleClipBounds.Size;
//Offset the coordinate system so that point (0, 0) is at the
center of the desired area.
e.Graphics.TranslateTransform(sz.Width / 2, sz.Height / 2);
//Rotate the Graphics object.
e.Graphics.RotateTransform(45);
sz = e.Graphics.MeasureString(theString, this.Font);
//Offset the Drawstring method so that the center of the string matches the center.
e.Graphics.DrawString(theString, this.Font, Brushes.Black, -(sz.Width/2), -(sz.Height/2));
//Reset the graphics object Transformations.
e.Graphics.ResetTransform();

Взято из здесь .

10 голосов
/ 12 декабря 2010

Вы можете использовать метод RotateTransform ( см. MSDN ), чтобы задать поворот для всего рисунка на Graphics (включая текст, нарисованный с помощью DrawString). angle в градусах:

graphics.RotateTransform(angle)

Если вы хотите выполнить только одну повернутую операцию, вы можете сбросить преобразование в исходное состояние, снова вызвав RotateTransform с отрицательным углом (альтернативно, вы можете использовать ResetTransform, но это очистит все преобразования, которые вы применили, что может быть не тем, что вы хотите):

graphics.RotateTransform(-angle)
9 голосов
/ 09 июля 2014

Если вы хотите, чтобы метод рисовал повернутую строку в центральной позиции строки, попробуйте следующий метод:

public void drawRotatedText(Bitmap bmp, int x, int y, float angle, string text, Font font, Brush brush)
{
  Graphics g = Graphics.FromImage(bmp);
  g.TranslateTransform(x, y); // Set rotation point
  g.RotateTransform(angle); // Rotate text
  g.TranslateTransform(-x, -y); // Reset translate transform
  SizeF size = g.MeasureString(text, font); // Get size of rotated text (bounding box)
  g.DrawString(text, font, brush, new PointF(x - size.Width / 2.0f, y - size.Height / 2.0f)); // Draw string centered in x, y
  g.ResetTransform(); // Only needed if you reuse the Graphics object for multiple calls to DrawString
  g.Dispose();
}

С наилучшими пожеланиями Ганс Миллинг ...

...