Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Проверка поинта на картинке! (https://javascript.ru/forum/project/21251-proverka-pointa-na-kartinke.html)

Solovei95 02.09.2011 17:06

Рисование изображения; создание и возвращение обьекта.
 
Особый скрипт для Canvas:
http://solovei95.github.com/jspack/other/img.html (пример)

Он нужен, если "PointInPath" уже не хватает!
Рисуется картинка как особый обьект!
Короче говоря - можно проверить, находится ли курсор на непрозрачном пикселе картинки-обьекта (но не контекста).

https://github.com/Solovei95/jspack/...her/libs/jp.js (исходники)

dmitriymar 03.09.2011 12:05

Везде в источниках описан этот алгоритм при определении цвета точки.
this.pointInPixel = function(x,y){
var idat = ctx.getImageData(0,0,path.width,path.height);

if(x==null){x=0;}
if(y==null){y=0;}

x = parseInt(x);
y = parseInt(y);

var i = (y * path.width + x) * 4;
if(idat.data[i+3]==0)
{return false;} else
{return true;}
}

return this;
};

Насколько я понимаю это продолжение темы что ты "придумал" как изображение объектом хранить. Объясни ,что ты по твоему мнению "придумал" или "применил первым"? И я не понимаю что это даёт по сравнению со стандартным методом. Определял бы ты цвет точки тогда да. А так это аналог 100% стандартной функции по определению наличия точки,не обладающий какими либо расширенным функционалом по сравнению с ним,но при этом сжирающий ресурсов в сотни раз больше чем стандартный,тоже касается и быстродействия.

Solovei95 03.09.2011 16:31

Вы все не правильно поняли!

Здесь картинка рисуется как обьект!
И определяет точку у обьекта, прозрачен он или нет.

Solovei95 03.09.2011 16:31

Не путать контекст с обьектом, который рисуется на контексте, но имеет более широкие функции!

Solovei95 03.09.2011 16:34

Спецификация:
1. Рисует изображение на основном контексте.
2. Создает новый обьект Canvas, с такой-же шириной и высотой, и что и текущий элемент. При этом изображение рисуется и там.
3. Становиться доступной функция для проверки прозрачности точки у обьекта.

dmitriymar 03.09.2011 17:28

Цитата:

Сообщение от Solovei95
Здесь картинка рисуется как обьект!
И определяет точку у обьекта, прозрачен он или нет.

Фу.....
Еще раз :-/ что ты здесь изобрёл? и код и описание этого метода более года лежит на многих сайтах.
Цитата:

Сообщение от Solovei95
2. Создает новый обьект Canvas, с такой-же шириной и высотой, и что и текущий элемент. При этом изображение рисуется и там

Бред!! копируется область канвы . копируется в объект имедж-Но не в объект Canvas! Точно также как в канву заносятся только объекты имедж если изображение нужно закинуть в канву.

Не изобретай своих "спецификаций" противоречащих норм. спецификациям .

Solovei95 04.09.2011 16:34

Важное обновление: в прототипе drawImage (у обьекта XCanvas):
- this.pointInPixel был исправлен на obj.pointInPixel
- заменен return this на return obj
- Обьявлена переменная obj

Solovei95 04.09.2011 16:34

Это было сделано, чтобы корректно работали обьекты!
Я прошу внимательно изучить исходный код!!!

Отличать this.ctx от ctx и т.п.

Solovei95 04.09.2011 16:47

Я только что радикально обновил код! Теперь вам легко разобрать:
- Рисует картинку на основном холсте
- Рисует картинку на холсте обьекта
- Возвращает обьект
- У обьекта имеется функция проверки непрозрачности точки у холста обьекта

var img = new Image();
img.src = "image.png";
img.onload = function(){
var x = new XCanvas(canvas,"2d"); //Выделяем Canvas
var i = x.drawImage(img,0,0); //Рисуем img и возвращаем обьект
var v = i.pointInPixel(100,100); //Определяем непрозрачность точки у картинки
}

Solovei95 04.09.2011 17:00

Запомните - все знают алгоритм определения цвета точки!
Но здесь описан совсем не тот скрипт, что вы думаете!

Здесь описан особый метод рисования Image.

dmitriymar 04.09.2011 17:10

Цитата:

Сообщение от Solovei95
Здесь описан особый метод рисования Image.

в чем он особый по сравнению с классическим лежащим на многих сайтах?в том что в нём ляп на ляпе?
var XCanvas = function(canvas,type){
this.canvas = canvas; ????????
this.ctx = this.canvas.getContext(type);
}
а если ид будет неправильным?
чегото ты мне напоминаешь Геворг. ник сменил?
и даже скажу больше-зачем получать всё изображение. достаточно получить его участок. нач. коорд там где мышь,конечные 1,1. итого получим однопикселное изображение ,какое разложив датой получим массив из 4х элементов . 4 й элемент это альфа.Итого всё то что ты написал сведётся к строкам.
1 навесить обработчики на канву
2 определить координаты клика на ней
3 получить однопиксельное изображение разложить его на составляющие
4 если код 4 го элемента не равен 0 то это точка
На всё про всё макс 10 строк.

Solovei95 04.09.2011 17:28

dmitriymar,
Вы мне щас намекнули про получение 1х1 из getImageData.
А теперь идите и посмотрите исходный код еще раз!

Solovei95 04.09.2011 17:29

Вот это вы имели ввиду?
if(x==null){x=0;}
if(y==null){y=0;}

x = parseInt(x);
y = parseInt(y);

var idat = obj.ctx.getImageData(x,y,1,1);

if(idat.data[3]==0)
{return false;} else
{return true;}

Это исправленная строчка в коде!

dmitriymar 04.09.2011 17:44

Цитата:

Сообщение от Solovei95
А теперь идите и посмотрите исходный код еще раз!

смотрел ,ничего нового и оригинального по сравнению с известным всем алгоритмом не увидел,увидел море косяков и строки ненужного кода.вообще не понимаю зачем объекты плодить-чтоб память жрали?
обработчик онклик на канву. и функция определения альфы и всё 10 строк макс
а это зачем ?
if(x==null){x=0;}
if(y==null){y=0;}
клик на канве по любому будут координаты
x = parseInt(x);
y = parseInt(y);
это зачем? приведение типов и так отработает.
итого:
в обработчике определить на каком клик,отменить всплытие,отменить стандартное поведение-что в коде не сделано.
определить альфу
И всё.

Solovei95 05.09.2011 09:28

Я кароче сделал простую строку!

//Check Point in Canvas of Image Object
obj.pointInPixel = function(x,y){
  if(obj.ctx.getImageData(x,y,1,1).data[3]==0) {
    return false;
  } else {
    return true;
  }
}

Solovei95 05.09.2011 09:39

Я кароче добавил colorPick.
Спецификации нет!
Описание: просто возвращает RGBA.

Solovei95 05.09.2011 09:43

ColorPick настолько суровая функция, что берет цвет пикселя у основного контекста.

dmitriymar 05.09.2011 16:06

Цитата:

Сообщение от Solovei95
ColorPick настолько суровая функция, что берет цвет пикселя у основного контекста.

а в канве откуда берётся не из основной?


Часовой пояс GMT +3, время: 19:41.