Изменить размер текста по дуге - PullRequest
0 голосов
/ 12 ноября 2018

Я планирую изменить ширину или высоту текста, но я не знаю, какое графическое преобразование использовать.

Это мой код (метод для преобразования текста в дугу):

    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);
    }

И мой вывод:

enter image description here

Что я хочу сделать, так это то, что если я масштабирую trackBar с опцией, если ширина или высота, текст также будет масштабировать его ширину или высоту.

...