Re[4]: изменение системы координат
От: SATo Россия  
Дата: 30.07.04 09:06
Оценка:
R>>Все прикольно, все получилось, но у меня теперь текст который я вывожу как:

R>>
R>>e.Graphics.DrawString("Sample", drawFont, drawBrush, x, y);
R>>

R>>выводится кверх ногами и буквы инвертированы. Как с этим бороться?
O>А что ты хотел? Изучай геометрию

O>Представь себе, что ты нарисовал на листочке всё что надо, а потом его перевернул (отразить относительно горизонтальной оси сложно будет) — как у тебя буквы будут выглядеть? Если же тебе кое-что отражать, а кое-что нет, то придётся работать руками и головой. Магии нет


Действительно, тут ничего не поделаешь: так уж заведено, что верхний край строки текста соответствует меньшему значению Y-координаты, а нижний — большему. Единственно, если нужно и рисовать и писать текст одновременно, причем при рисовании ость Y должна быть направлена снизу вверх, а текст выводиться в тех же координатах, что и рисунок, то можно немного задачу упростить. Для этого:
0. На этом шаге рисунок уже нарисован, Graphics находится в системе координат рисунка.
1. Cконструировать Matrix с обратным преобразованием из координат рисунка в координаты клиентской области (делается одним вызовом конструктора Matrix).
2. Координаты строки текста в системе рисунка передать методу Matrix.TransformPoints().
3. Переключться в систему координат клиентской области вызовом Graphics.ResetTransform().
4. Рисовать текст, используя координаты, полученные на шаге 2.

По крайней мере, это снимает необходимость пересчитывать координаты вручную.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.