Я хочу нарисовать строку и повернуть ее под произвольным углом. Я просто вычисляю новые размеры области, в которой находится повернутое изображение, затем создаю растровый объект и с помощью графического объекта на нем рисую строку с 3 преобразованиями (перевод в центр, поворот и обратный перевод). Я написал следующий код, но качество не желательно. У кого-нибудь есть идея?
private Image RotateText(string Text, int FontSize, float Angle)
{
//Modify angle
Angle *= -1;
//Calculate rotation angle in radian
double AngleInRadian = (Angle * 2 * Math.PI) / 360d;
//Instantiate a font for text
Font TextFont = new Font("Tahoma", FontSize, FontStyle.Bold);
//Measure size of the text
Graphics Graphic = this.CreateGraphics();
SizeF TextSize = Graphic.MeasureString(Text, TextFont);
//Calculate size of the rotated text
double NewWidth = Math.Abs(TextSize.Width * Math.Cos(AngleInRadian)) + Math.Abs(TextSize.Height * Math.Sin(AngleInRadian));
double NewHeight = Math.Abs(TextSize.Width * Math.Sin(AngleInRadian)) + Math.Abs(TextSize.Height * Math.Cos(AngleInRadian));
//Instantiate a new image for rotated text
Bitmap RotatedText = new Bitmap((int)(Math.Round(NewWidth)), (int)(Math.Round(NewHeight)));
//Get graphic object of new isntantiated image for painting
Graphics TextGraphic = Graphics.FromImage(RotatedText);
TextGraphic.InterpolationMode = InterpolationMode.High;
//Calcaute coordination of center of the image
float OX = (float)NewWidth / 2f;
float OY = (float)NewHeight / 2f;
//Apply transformations (translation, rotation, reverse translation)
TextGraphic.TranslateTransform(OX, OY);
TextGraphic.RotateTransform(Angle);
TextGraphic.TranslateTransform(-OX, -OY);
//Calculate the loaction of drawing text
float X = (RotatedText.Width - TextSize.Width ) / 2f;
float Y = (RotatedText.Height - TextSize.Height) / 2f;
//Draw the string
TextGraphic.DrawString(Text, TextFont, Brushes.White, X, Y);
//Return the image of rotated text
return RotatedText;
}
Результат таков: