2009-11-23 5 views
4

У меня есть массив из Point переменных. При рисовании с использованием Graphics.DrawLine они создают ожидаемое изображение. Моя проблема в том, что 0,0 фактически является центром изображения (а не слева вверху моего холста, как ожидалось). Мои координаты X и Y в точках могут содержать отрицательные числа.Нарисовать точки на холсте с помощью смещения?

Когда я пытаюсь нарисовать это на своем Image, конечно, я получаю 1/4 от общего изображения, так как остаток рисуется за пределами моего холста. Как правильно центрировать этот рисунок на моем холсте?

Я знаю размеры изображения, которые я хочу Я знаю, где 0,0 (ширина/2, высота/2).

Я полагаю, что я могу переводить каждый Point, но это кажется трудным для этого.

ответ

3

TranslateTransform() может отображать координаты для вас, если вы настроите преобразование во время обработчиков чертежей.

Graphics.TranslateTransform @ MSDN

Или сопоставьте свои координаты, добавив половину ширины и половину высоты в нужной области просмотра для каждой координаты.

Кроме того, вам может потребоваться масштабирование координат. Для этого вы можете использовать Graphics.ScaleTransform.

Graphics.ScaleTransform @ MSDN

Если вы не хотите использовать это, то вы должны разделить X координаты на сумму процентов вы хотите, чтобы растянуть ширину, и разделить Y координаты на сумму процентов вы хотите, чтобы растянуть высоту , Это дает нам 1 для 100%, 1,2 для 120%, 0,8 для 80% и т. Д.

+0

+1: Я много раз использовал класс Graphics, и часто делал некоторые расчеты вручную и т. Д., Даже не понимая, что эти методы доступны. Очень полезно. – Ian

0

При создании массива добавьте смещение к каждому значению x, равному половине ширины, и смещению к y, равному половине высоты. Таким образом, когда очки нарисованы, они находятся в ожидаемой позиции.

1

Добро пожаловать в версию Windows Cartessian Plane. Ваше последнее утверждение верно. Вы должны компенсировать каждую точку. Единственная реальная помощь, которую вы можете дать себе, - сделать логику смещения отдельным методом для очистки основного кода чертежа.

+0

TranslateTransform() не может помочь в этом случае? Спасибо – GDIHelp

Смежные вопросы