Работа с ограниченными событиями перемещения мыши в .NET - PullRequest
0 голосов
/ 22 августа 2011

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

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

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

Ответы [ 4 ]

1 голос
/ 22 августа 2011

Вы можете просто сохранить точки в виде отрезков, пока пользователь рисует, и отображать их с помощью Graphics.DrawLine. Если вы действительно хотите получить фактические точки, вам нужно будет решить, хотите ли вы, чтобы прямые или интерполировали дуги (округленные) через них.

Для прямых есть http://en.wikipedia.org/wiki/Bresenham's_line_algorithm - дуги немного сложнее:)

0 голосов
/ 22 августа 2011

Обычная процедура рисования таким способом - использование линий, а не точек.Псевдокод выглядит следующим образом:

on mousemove
{
    draw line from lastCoord to current coordinate
    store current coordinate in lastCoord
}

on mousedown
{
    store current coordinate in lastCoord
}
0 голосов
/ 22 августа 2011

Вы должны просто использовать две точки: точку, когда пользователь нажимает кнопку мыши (MouseDown), и точку, когда он отпускает кнопку мыши (MouseUp)... затем вы проведете линию между этими двумя точками.

Например, с помощью метода Graphics.DrawLine ...

0 голосов
/ 22 августа 2011

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

...