Качество работы. Решение, которое я предлагаю основано на встроенной возможности в canvas api, подходящей для этой задачи. А именно тени. Идея такова когда пользователь рисует по канве, на самом деле рисуется линия где нибудь за пределами канвы с определенным смещением, а тень настраивается так, чтобы попадать как раз в то место, где рисует пользователь. Драйвер Xperia Sola Yна Windows 7 далее. В переменную bufer сохраняется растр канвы. Тут и выясняется главный минус алгоритма. После добавления каждой новой точки к линии и к тени соответственно, нам приходится перерисовывать заново всю линию. Если этого не делать, а составлять линию из отрезков соединяющих две соседних точки, то будет заметна ее прерывистость. Ответ скажется. Заметное замедление начинается уже после 5 секунд рисования, но рисовать без особых трудностей можно еще долгое время. В ряде случаев этот вариант может быть приемлем. Например в редакторе на deviantart именно такой или схожий вариант. Как вариант, можно задать фиксированный размер массива и сохранять канву в буфер после заполнения, а затем продолжать рисовать с этой точки. В месте разрыва будет небольшой артефакт. Кого то может устроить и такой вариант. Конечно, есть еще варианты. Вот, скажем так, не самый простой. На этом рисунке я отметил какие куски линии придется прорисовывать по отдельности. Полукруги нужно будет заливать радиальным градиентом от непрозрачного к прозрачному. Прочие куски линейным градиентом. Сразу скажу в данном алгоритме очень много не сильно сложной, но занудной математики и приводить я его не стану. Если это действительно нужно лучше вывести его самому, чтобы полностью понимать все моменты. Вот основные моменты алгоритма при зажатии кнопки нужно запомнить точку стартанеобходимо нарисовать полукруг с радиальным градиентом, когда будет известна вторая точка чтобы повернуть его в сторону этой точкидалее рисуются трапеции с учетом углов между отрезками линиитрапеции заливаются градиентом прозрачный непрозрачный прозрачный от одного основания до другогопри отпускании нужно нарисовать завершающий полукруг. Есть еще довольно простой способ реализации спрайтами. Вот и все, о чем я хотел сегодня рассказать. В комментариях отвечу на все возникшие вопросы. PS спасибо пользователю Serator за то, что подсказал использовать outline вместо border. Это избавило от погрешности в координатах. The. Shock за пару дельных замечаний. Предыдущие статьи из серии Кисть для скетчей.
Графический Редактор Canvas© 2017