Показать сообщение отдельно
  #2 (permalink)  
Старый 26.12.2014, 21:19
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Задачу не решил, но появились мысли, как реализовать. Кому интересно, может добавит что-нибудь к этому. В общем, все изображения, как выяснилось, будут сделаны в Corel. В картинке у каждого сегмента нужно провести границы уникального цвета, который больше нигде повторяться не будет, толщиной в 1 пиксель. По сути, изображение - это матрица (массив), значения каждой ячейки которой - какой-либо цвет. В месте, где пользователь кликнет мышкой, будут определены координаты пикселя, от которого нужно будет во все стороны делать перебор координат, распознавая нужные координаты пикселя по его значению, то есть цвету. Это и будут пиксели границы. Нужно будет найти 4 координаты, где граница рядом с выбранным пикселем будет выделяться по расположению сильнее всего. Другими словами, найти наивысшие точки границы. После того, как нашли эти точки, делаем перебор в прямоугольнике где углами будут начальная точка, наивысшая верхняя и боковая. И так должно получиться 4 прямоугольника. Затем все найденные координаты (это и будет граница сегмента) перекрасить в другой цвет (это уже для удобства пользователя, чтобы он видел, какой именно сегмент выбрал). После этого пользователь выбирает цвет, и весь массив пикселей между этими координатами (границами) должен закраситься в этот цвет. Я так полагаю, все это придется делать средствами Canvas и JS. Если просчитывать координаты пикселей самого изображения средствами JS не получится, то можно использовать PHP в связке с Ajax (по-моему, PHP это может), чтобы все это дело было интерактивным. А вот само перекрашивание уже делать средствами JS на Canvas, передавая все координаты, обработанные PHP-скриптом. Как-то так. Конечно, тут может быть очень много подводных камней, особенно в определении координат, но я пока других вариантов не вижу совсем. У кого есть мысли, прошу поделиться. Спасибо.
Ответить с цитированием