Как добиться плавной раскрашенной кривой для приложения с белой доской?

Я создаю простое приложение для белой доски на ActionScript 3. Большинство приложений для рисования и рисования на ActionScript обычно используют интервал, таймер, событие mouseMove или событие enterFrame для отслеживания положения мыши и рисования линий или кистей между отслеживаемыми точками. .

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

Для меня это не удивительно, я просто понятия не имею, как можно добиться более гладкой линии, как инструмент кисти Photoshop. Имейте в виду, что кисти для моего приложения в основном основаны на фигурах и не используют или не могут использовать API рисования для рисования непрерывных линий. Другими словами, graphics.curveTo () не подходит. Я также визуализирую спрайты или фигуры, созданные кистями, в экземпляр BitmapData.


person Matt W    schedule 23.02.2010    source источник


Ответы (4)


Так как же вы рисуете линии, если не используете графический API? (вы можете посмотреть на функцию lineBitmapStyle графического API).

Тем не менее, что бы я сделал, независимо от метода рисования, это оценил бы путь кисти между двумя имеющимися у вас точками, возможно, используя предыдущие точки, чтобы определить, в какую сторону (и насколько) изгибать путь. Вы читали о кривых Безье? (http://en.wikipedia.org/wiki/B%C3%A9zier_curve)

person quoo    schedule 23.02.2010
comment
Я рисовал линии через каждый интервал, визуализируя растровое изображение спрайтов, добавленных в список отображения. Я использую эту технику, потому что не все кисти являются линиями, но иногда имеют необычную форму. - person Matt W; 24.02.2010
comment
Верно, но путь кисти по-прежнему сопоставляется с линией - возможно, это поможет вам, если вы начертите эти пути (в качестве меры отладки), а затем сопоставите значения x, y реальной формы кисти с этим путем. - person quoo; 25.02.2010

Мое решение оказалось комбинацией двух техник. В итоге я показал предварительный просмотр контура по мере того, как кисть использовалась / закрашивалась. По мере того, как это происходит, я собираю все точки между интервалами. Затем, когда пользователь отпускает кнопку мыши, я рисую более точный изогнутый мазок кисти, используя квадратичную кривую Безье между всеми собранными точками.

person Matt W    schedule 24.02.2010

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

person Pbirkoff    schedule 23.02.2010

http://www.paultondeur.com/2008/03/09/drawing-a-cubic-bezier-curve-using-actionscript-3/

Посмотри на это :) там есть образцы

person Chris    schedule 23.02.2010