Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Вертикальное рисование текста GDI+


Автор: Kolovorot 23.11.2010, 11:15
Как нарисовать вертикальный текст?

Автор: de_Nis 23.11.2010, 16:28
М. б. это:

private void button2_Click(object sender, EventArgs e) 
{ 
Graphics g = CreateGraphics(); 
SolidBrush solBrush = new SolidBrush(Color.Gray); 
Font f = new Font("Tahoma", 26, FontStyle.Bold); 
// Разворачиваем текст на 30 градусов 
g.RotateTransform (30); 
g.DrawString("Тра-та-та", f, solBrush, 40, 10); 
g.Dispose(); 
} 

Автор: Kolovorot 24.11.2010, 09:49
Цитата(de_Nis @ 23.11.2010,  16:28)
М. б. это:

private void button2_Click(object sender, EventArgs e) 
{ 
Graphics g = CreateGraphics(); 
SolidBrush solBrush = new SolidBrush(Color.Gray); 
Font f = new Font("Tahoma", 26, FontStyle.Bold); 
// Разворачиваем текст на 30 градусов 
g.RotateTransform (30); 
g.DrawString("Тра-та-та", f, solBrush, 40, 10); 
g.Dispose(); 
}

Это. Только нужно сделать упор на то, что RotateTransoform(270) поворачивает систему координат на 270 градусов. Соответственно придётся использовать ещё метод  g.TranslateTransform(val). А так уже сам разобрался.

Автор: de_Nis 1.12.2010, 22:55
Для рисования текста под углом надо применить нужное преобразование к системе координат, нарисовать то, что нам надо, и потом восстановить старую систему координат:
  
Код


    //Непосредственное рисование.
    protected override void OnPaint(PaintEventArgs e)
    {
    DrawString(e.Graphics, "Igor", 100, 100, 180, Brushes.Red);
    DrawString(e.Graphics, "Igor", 100, 200, 90, Brushes.Teal);
    base.OnPaint(e);
    }
    // Метод для рисования под углом.
    void DrawString(Graphics g, string s, int x, int y, int angle, Brush brush)
    {
    // Устанавливаем начало координат в точку (x, y).
    g.TranslateTransform(x, y);
    // Поворачиваем систему кооординат.
    g.RotateTransform(angle);
    // Выводим надпись.
    g.DrawString(s, new Font(Font.FontFamily, 16), brush, 0, 0);
    // Поворачиваем систему кооординат обратно.
    g.RotateTransform(-angle);
    // Устанавливаем начало координат в первоначальную точку.
    g.TranslateTransform(-x, -y);
    }



Для удобства вынесли код для рисования под углом в отдельный метод. Смысл кода должен быть понятен из комментариев.
Обратите внимание, что угол указываем в градусах.

Разумеется, указанный прием можно использовать не только для вывода текста под углом, но и рисунков и т. п.
(см. http://sharpes.ru/static/kak_narisovat_tekst_pod_uglom.html)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)