Пользовательский интерфейс Curve, имитирующий Powerpoint и Photoshop на C#

Я работаю над программой на С#, которая включает редактирование изображений и анимацию.

Я обнаружил, что мне нужен интерфейс, который позволяет моим пользователям рисовать кривые.

Я решил, что система, которую используют Photoshop и Powerpoint, довольно интуитивно понятна.

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

Однако, хотя все они описывали, как точки определяют кривую, ни в одном из них не описывалась система определения, которую используют Powerpoint и Photoshop, с двумя отрезками, напоминающими касательные.

Интуитивно я думаю, что эти сегменты каким-то образом используются для вычисления точек, определяющих кривую, но я совершенно не понимаю, как.

Короче говоря, я пытаюсь позволить моему пользователю нарисовать кривую Безье так же, как это делают Photoshop и Powerpoint, используя два сегмента линии, имеющие конечную точку в заданной точке, которые определяют «касательную», длину и ориентацию этих сегментов. оба влияют на кривую.


person Jack    schedule 21.05.2012    source источник
comment
Посмотрите на метод DrawBezier класса Graphics.   -  person SimpleVar    schedule 22.05.2012


Ответы (1)


this.CreateGraphics().DrawBezier(Pens.Black, 0, 0, 20, 80, 80, 20, 100, 100);

this в данном случае — это форма, и я вызвал ее в переопределении события OnPaint.

Вы также можете нарисовать Безье на изображении, а затем просмотреть его:

var bitmap = new Bitmap(100, 100);

Graphics.FromImage(bitmap).DrawBezier(Pens.Black, 0, 0, 20, 80, 80, 20, 100, 100);

this._pictureBox.Image = bitmap;

Результат в моем примере:

Пример

person SimpleVar    schedule 21.05.2012
comment
Это не отвечает на мой вопрос. Я спрашиваю, как вы рисуете кривую Безье через определенные заданные точки, учитывая два касательных сегмента, как это видно в Powerpoint и Photoshop. - person Jack; 22.05.2012
comment
@ Джек Вы имеете в виду нарисовать изогнутую линию, проходящую через набор точек? - person SimpleVar; 22.05.2012