Я не могу понять, как GDI + рисует линию на поверхности, возможно, у нее есть какой-то алгоритм для этого.
Например Давайте возьмем поверхность 10х10 пикселей.
Bitmap img = new Bitmap(10, 10);
Теперь нарисуем линию на этой поверхности шириной 5px и смещением сверху 5px.
using (var g = Graphics.FromImage(img))
{
g.Clear(Color.White);
var pen = new Pen(Color.Brown);
pen.Width = 5;
g.DrawLine(pen, 0F, 5F, 10F, 5F);
}
Мы получим:
Рисование началось не с пикселя №5, оно началось с пикселя №4.
Очевидно, что начальная точка рассчитывается отдельно. Но как?
Я пытался получить регулярность, и получил это:
y = offset + width/2 - 1
где y - реальная начальная точка y, смещение - выбранная начальная точка y.
Но в некоторых случаях это не работает. Например, давайте возьмем width = 6, выбранное смещение вершины = 0, мы получим y = 2, и оно будет нарисовано так:
Должно отображаться 6 пикселей, но это не так.
Так что должен быть более общий алгоритм выбора начальной точки, но я действительно понятия не имею, что это может быть.
Любая помощь приветствуется.