2012-03-26 3 views
1

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

Есть ли какой-нибудь умный, но свободно доступный алгоритм для рисования кривой непосредственно в пикселях? В настоящее время я использую алгоритм, реализованный здесь: http://www.bytearray.org/?p=67 quadBezier() Мне интересно, есть ли способ изменить его для рендеринга сглаживания безье? Спасибо заранее.

Я делаю это для учебных целей и потому, что я надеюсь, что это будет быстрее, чем использование пикселей копии из опции Shape. Вот пример, показывающий NONE-гладкая Безье быстрее, чем обычный Безье: http://lab.generalrelativity.org/raster/

+0

не сглаживает функцию постпроцесса? в любом случае это не что-то тривиальное для реализации - общий поиск для реализации должен дать вам представление о том, что задействовано. просто используйте 'draw()' – divillysausages

ответ

4

Реализация свой собственный алгоритм почти наверняка будет медленнее, чем при использовании bitmapData.draw(shape).

Когда вы используете graphics.lineTo, graphics.curveTo и т. Д., Вы строите модель, но на самом деле ничего не рисуете. Это происходит только после того, как форма добавляется на сцену и во время последующей фазы [render], на которую проходит модель, и пикселей, нарисованных быстрым алгоритмом, написанным на C. Когда вы используете bitmapData.draw для рисования вектора в растровое изображение, он будет использовать тот же собственный код. Таким образом, это не так, как если бы вы рисовали что-то дважды, как вы можете себе представить, и будет трудно (или невозможно) биться за скорость, реализуя что-либо с нуля в AS3.

+1

Я провел несколько тестов (для скорости) и выяснил, что вы были правы. Также я узнал, как работает алгоритм для рисования безье. Спасибо за подробное объяснение. – zehelvion

Смежные вопросы