09.10.2014, 10:49
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
canvas - getImageData проверка смены пикселя
Вопрос такой. Как можно проверить изменение цвета пикселя в canvas?
Прочитал про getlmageData, если сделать два объекта, в один положить текущие пиксели, а в другой - обновленные. Если их каждый раз проверять if-ом на различие с первоначальными, то это будет огромная затрата ресурсов.
Может хитрость есть какая-то?
|
|
09.10.2014, 11:43
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
if будет ровно 1. Я все равно не понял что вы там делаете, надо ли шерстить пиксельный массив, но если надо то в цикле у вас просто сложение с результатом
var res = false;
for// по пикселам 2-х картинок
res |= (color1-color2); // хотя бы 1 раз будет не 0 и res станет true навсегда
Если только визуально проверять, то подберите подходящий режим композинга. Их там дофига, я уже забыл какой бы подошел. ТО есть рисуете картинку 2 поверх картинки 1 в заданном режиме и всю разницу увидите глазами.
|
|
09.10.2014, 11:46
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
В терминах Фотошопа это режим difference. Так и называется.
|
|
09.10.2014, 15:44
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Не совсем то, что надо. Мне необходимо найти, какие пиксели поменяли цвет с белого на черный, и соответственно их номера. Именно поэтому я и говорю, что циклом каждый раз проходить динамически перерисовывающийся холст 1000*800px очень затратно.
То есть нужна функция, которая определит, какой пиксель поменял цвет и выдаст его координаты/номер без разницы. Это надо сделать без постоянной перепроверки массива пикселей циклом. Есть какие-нибудь идеи?
Последний раз редактировалось levshkatov, 09.10.2014 в 16:27.
|
|
09.10.2014, 16:35
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Может можно как-то прикрутить самодельный onchange к объекту
context.getImageData.data ?
Но не сравнивая его с первоначальным объектом.
UPD. Почитал про то, что можно писать свои события на jQuery.
Тогда опять же вопрос, это будет DOM объектом или нет?
Последний раз редактировалось levshkatov, 09.10.2014 в 16:47.
|
|
09.10.2014, 16:58
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Сообщение от levshkatov
|
Не совсем то, что надо.
|
Не совсем то что было надо с самого начала. И продолжаете скрывать свои цели. КОлитесь, чем правдивее показания - тем больше вариантов нахождения решения. Может оно вовсе и не так делается как вы придумали.
Вы же свое решение предлагаете реализовать. А их думаете 1?
|
|
09.10.2014, 17:04
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Я достаточно доходчиво объяснил: То есть нужна функция, которая определит, какой пиксель поменял цвет и выдаст его координаты/номер без разницы. Это надо сделать без постоянной перепроверки массива пикселей циклом.
Цели? Ну цели разные могут быть. Например, есть функция для простого рисования, с mouseMove естественно. Так вот, необходимо узнавать координаты пикселей, которые пользователь закрасил.
|
|
09.10.2014, 17:14
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
Это неколебимо - не колятся. Упрутся в свою придумку и долбят форумы. И что вы с этими координатами делаете? (в порядке национальной традиции вести дискуссию в формате допроса). Выделять? Добавьте слой.
Канвасные процедуры выполняются на клиенте. То есть теоретически вы можете написать свой веб-фотошоп. Потому что в ФШ по щелчку на канале загружается беготня мураьев по thereshold 50% за секунду на нормальном таком пикселяже.
|
|
09.10.2014, 17:20
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Уж извините, то что я буду делать с координатами это мое сугубо личное дело. Я спросил две вещи, как это можно сделать и является ли getImageData DOM элементом. Если не можете ответить, просьба не флудить в данном топике, ибо "Упрутся в свою придумку и долбят форумы" и "То есть теоретически вы можете написать свой веб-фотошоп. "
это чистейший флуд.
|
|
09.10.2014, 17:21
|
Профессор
|
|
Регистрация: 23.10.2010
Сообщений: 2,718
|
|
В ФШ рендер сделан вот так: у него же картинка может быть опупенной, а юзер ее может уменьшить - но не саму, а экранный кэш. Так вот экранный кэш сегментируется и рендерится не весь канвас (в ФШ тоже такой термин) а тот сегмент, который затронули изменения. А изменения отождествляются именно по кешу. То есть юзер махнул кистью - ФШ нарисовал ее след в кеше, в сегменте кеша. А пока юзер любуется - ФШ перетаскивает все в свой срач-диск, ну где лежат собственно пикселы. Не знаю пригодится ли.
|
|
|
|