Форум: "Игры";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизБыстрое сравнение картинок Найти похожие ветки
← →
Cash © (2006-05-20 07:05) [0]Есть два Canvas с одинаковыми размерами. Один несет эталонное
изображение, а другой - тестируемое. Как можно очень быстро
проверить идентичность тестируемого изображения.
Ведь Pixels свойство довольно медленная штука!
← →
antonn © (2006-05-20 08:33) [1]создать битмап, скопировать на него канвас, пройтись scanline()
← →
antonn © (2006-05-20 08:33) [2]...удалить битмап
забыл главное:)
← →
Cash © (2006-05-20 11:48) [3]Эх, товарищ! Еслиб это все так просто было!
Вот представь себе если такая ерунда будет около 25-50-200 раз в секунду
срабатывать! (последняя цифра примерна)
Такую тревиальщину я бы и без вопросов всяких сделал. :)
antonn, ты с HBITMAP знаком? Или мож у HDC есть что в этом роде.
(в смысле проверки)
← →
MBo © (2006-05-20 12:59) [4]какие размеры?
← →
Cash © (2006-05-20 13:01) [5]MBo © (20.05.06 12:59) [4]:
16x16
24x24
32x32
64x64
← →
MBo © (2006-05-20 13:27) [6]>Cash
С таким размером - не проблема проверять несколько тысяч раз в секунду
Откуда берется тестовое изображение?
← →
Cash © (2006-05-20 13:59) [7]С десктопа, а точнее с области чужого окна.
Я его захватываю, беру HDC с хендла, пихаю это в канву и могу спокойно
на ней рисовать. Тока канву я не для рисования взял, а для анализа,
подумал, что так лучше. Просто по определенным координатам надо
взять область (16х16 к примеру) и посмотреть, совпадает ли она с эталоном.
Дак вот только проверка и осталась! Что то мне подсказывает, что там
вроде с маской или еще чем можно обойтись. Я попробовал с помощью Pixels
пройтись по всей области чужого окна, но это авантюра! Так медлено!
Уж очень неохота тревиальным перебором обходиться! :)
← →
MBo © (2006-05-20 14:17) [8]Образец - Dib-bitmap нужного размера. Перед каждой проверкой делаешь его копию, отрисовываешь ы нее Bitblt нужный кусок с исходного контекста в xor-режиме. При этом одинаковые пикселы станут черными, разные - нечерными.
Остается только выполнить проверку одной картинки - для скорости используй ScanLine или http://www.delphimaster.ru/articles/pixels/index.html
← →
Don Nikola © (2006-05-20 15:49) [9]Вопрос, а какого рода картинки?
Если у тебя конечное количество эталонов, то можно проверять не весь битмап, а только один-два пикселя, что на порядки быстрее.
Так, например, можно дешево определить масть карты в java-игре на деньги ;)
И соответственно сделать авто-игрока, например в 21 с вероятностью в твою пользу.
← →
antonn © (2006-05-20 16:10) [10]Cash © (20.05.06 11:48) [3]
Вот представь себе если такая ерунда будет около 25-50-200 раз в секунду
создаешь битмап один раз, удалишь при закрытии программы.
а насчет скорости, я битмапы по 128*128 выводил с частотой больше, чем 300 (именно через сканлайн выводил, попиксельно), т.ч. ничего невозможного. Правда я процессор терзал неслабо:)
> antonn, ты с HBITMAP знаком?
нет, не знаком, не представился случай:)
← →
Cash © (2006-05-20 16:15) [11]MBo © (20.05.06 14:17) [8]:
Спасибо! Это как раз то, про что моя дырявая башка забыла!!! :)))
ЗЫ: А канвас веравно рулит! :)
← →
Dimka Maslov © (2006-05-24 16:31) [12]1. Через обращение к ScanLine вычислить MD5 эталона
2. Потом вычислить MD5 второй картинки.
3. Сравнить, если MD5 двух картинок равны картинки абсолютно идентичны
← →
antonn © (2006-05-24 17:13) [13]Dimka Maslov © (24.05.06 16:31) [12]
1. Через обращение к ScanLine вычислить MD5 эталона
хм... а зачем тогда сканлайн() ?
← →
Cash © (2006-05-24 17:20) [14]Dimka Maslov © (24.05.06 16:31) [12]:
Бр-р-р-р... чет мне это быстрым не кажется! Да и к тому же я не знаю
как MD5 вычислять!
Не, я все уже решил, мне надо быто именно получить черную или чуть чуть
не черную картинку, а там у меня есть приемчик один.
(со scanline конечно)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c