Я планирую изменить ширину или высоту текста, но я не знаю, какое графическое преобразование использовать.
Это мой код (метод для преобразования текста в дугу):
private void DrawTextOnCircle(Graphics gr, Font font,Brush brush, float radius, float cx, float cy, string top_text, RectangleF _rect, float spacing)
{
float x = 0f;
float y = 0f;
x = Shape.center.X - (_rect.Width / 2f);
y = (Shape.center.Y - (_rect.Height / 2f));
float TransformX = Shape.center.X;
float TransformY = Shape.center.Y;
gr.TranslateTransform(TransformX, TransformY);
StringFormat string_format = new StringFormat();
List<RectangleF> r = MeasureCharacters2(gr, font, _rect, top_text);
float num = ((IEnumerable<float>)(from CharacterRectangle in r.Cast<RectangleF>() select CharacterRectangle.Width)).Sum();
GraphicsContainer gc = gr.BeginContainer();
gr.SmoothingMode = SmoothingMode.AntiAlias;
gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
for(int i=0; i< top_text.Length; i++)
{
float dx = 0f;
RectangleF ef = r[i];
float dy = (ef.Height / 2f) - (radius * 3.779528f);
float angle = spacing * i;
float startAngle = 0;
gr.RotateTransform((float)-90 + startAngle);
if (i != 0)
gr.RotateTransform(angle);
gr.TranslateTransform(dx, dy);
//gr.ScaleTransform()
char ch = top_text[i];
if(!isOutlined)
gr.DrawString(ch.ToString(), font, Brushes.Red, 0, 0, string_format);
else
{
GraphicsPath path = new GraphicsPath();
path.AddString(top_text[i].ToString(), font.FontFamily, Convert.ToInt32(font.Style), gr.DpiY * font.Size/72f, new PointF(0f, 0f), string_format);
gr.DrawPath(new Pen(Brushes.Red, 0.05f), path);
}
gr.ResetTransform();
}
gr.EndContainer(gc);
}
И мой вывод:
Что я хочу сделать, так это то, что если я масштабирую trackBar с опцией, если ширина или высота, текст также будет масштабировать его ширину или высоту.