Реализация свободного рисования формы в приложении рисования - PullRequest
4 голосов
/ 16 октября 2010

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

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

Будет ли его рисование, по существу, штамповать сплошные круги (радиуса, который являетсяширина пера) для каждой координаты, сообщенной при перемещении мыши, и интерполируется между ними, если перемещение прыгает достаточно далеко?

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

1 Ответ

0 голосов
/ 18 октября 2010

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

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

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

...