powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Graphics.DrawString
3 сообщений из 3, страница 1 из 1
Graphics.DrawString
    #33175767
NNNata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
У меня такой наивный вопрос. Есть код примерно такой:

Graphics canvas = Graphics.FromImage(picture);
StringFormat drawFormat = new StringFormat();
drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
сanvas.DrawString("27 MAY", textFont, textBrush, x, y, drawFormat);

В результате получается "27 MAY" написанное по вертикали. Ясно что по вертикали фраза может быть написана двумя разными способами: может читаться с левой стороны( цифра "27" выше "MAY" - разворот "27 MAY" по часовой стрелке на 180 градусов) и может читаться с правой стороны(против часовой стрелки на 180).

С таким кодом - получается первый вариант написания. Как получить второй вариант?
...
Рейтинг: 0 / 0
Graphics.DrawString
    #33176749
Фотография greenapple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм, надо наложить матрицу вращения, а т.к. мир вращается относительно верхнего левого угла контекста, надо еще наложить матрицу преобразования...


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
protected override void OnPaint(PaintEventArgs e)
{

	string s = "27 MAY";

	Font f = new Font("Microsoft Sans Serif",  8 .25f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point,  204 );
	SolidBrush b = new SolidBrush(Color.Black);
	
	StringFormat sf = StringFormat.GenericTypographic;	
	sf.FormatFlags = StringFormatFlags.DirectionVertical;

	SizeF sz = e.Graphics.MeasureString(s, f); //замеряем размер текста

	e.Graphics.RotateTransform(180f); //накладываем матрицу вращения
	e.Graphics.TranslateTransform(sz.Height, sz.Width, MatrixOrder.Append);  
	// матрицу трансформации, MatrixOrder.Append обязательно иначе умножение будет с пустой матрицей
	// это сдвиг на размер прямоугольника, в который поместилась строка

	e.Graphics.DrawString(s, f, b,  0 ,  0 , sf); // рисуем

	base.OnPaint (e);
}


... я пока лист бумаги не покрутил, повернуть не смог :). Таким же образом можно обойтись без StringFormatFlags.DirectionVertical
...
Рейтинг: 0 / 0
Graphics.DrawString
    #33176783
NNNata
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпасибо!
хоть кто-то откликнулся! сейчас проверим...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Graphics.DrawString
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]