|
|
  |
Пожелания, Предложения по развитию сюда |
|
|
Cockney |
1.5.2014, 19:54
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22550
Пользователь №: 16.156

|
начал копать тему про работу с бинарниками,обратил внимание на дельфийский класс TStream...запись/чтение байт в файлы(любые,а не только текстовые),чтение из прочих потоков(буфер обмена)....вообщем,наверное,все есть,решил делать для него обертку...правда есть еще пара вопросов,но я пока не дошел,позже если не разберусь - озвучу...
мастер,ты говорил про новый тип поиска изображений...озвуч идею...
|
|
|
|
DarkMaster |
1.5.2014, 21:38
|
          
Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29679
Пользователь №: 11.279

|
Все предельно просто. Нам понадобится две функции: 1) Сохранение в память буфера с проверкой на то, что он является изображением. 2) Непосредственно обработчик поиска.
Есть очень верный способ получить реальное изображение из игры - кнопка принтскрина. Зачастую там, где финдколор спотыкается, скрины делаются вполне исправно.
sendex {PrintScreen} плагином помещаем битовую маску в память
теперь у нас есть битовая маска, которая статична. Мы можем произвести на ней любое количество поисков без повторных снятий скринов. Хочу заметить, что захват изображения - это львиная доля быстродействия и причина падения фпс в играх, т.к. на скриншот требуется две развертки экрана, а показана будет одна. Из-за пропуска разверток мы получаем микрофризы и падение фпса. Так же в виде преимущества мы получаем возможность собирать изменяющиеся строки, например, координаты, без риска получить строку состоящую из двух и по факту ошибочной.
Из фишек которые можно было докрутить: 1) Помещение битовой маски с указанием ее имени/индекса. Это позволит сохранять несколько изображений и оперировать с ними по мере необходимости. 2) Возможность поиска битовой маски в битовой маске. Делаем большой скрин, потом делаем скрины небольшой области. Проверяем изменилась ли данная область. По сути детектор движения. Может помочь в частности с аукционами и перебиванием ставок. 3) MSI Afterburner каким-то образом способен без фризов делать скриншоты напрямую с видюхи. Это программа максимум, но красота этого способа в том, что лагов не становится вообще, быстродействие шикарное. Более того он умудрился сделать скриншот двух 3д приложений одновременно при том, что одно из них было запущенно через АСТЕР, а второе перекрыто! Я хз как это сотворили, но челюсть закатилась далеко...
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
1.5.2014, 22:06
|
       
Master
Сообщений: 1.404
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22550
Пользователь №: 16.156

|
так....как я хотел бы сделать...
после загрузки плагина вызываем скриптом функцию инициализации,в которой указываем число потоков данных,т.е например - stream.init(10),эта функция создает 10 потоков произвольного объема,дальше в поток номер 1 ложим большой скрин,а во все остальные потоки ложим искомые картинки...загружаются все данные в stream байтами,ибо не нашел как читать/записывать биты...дальше загружаем по очереди из потоков в промежуточный буфер длл(возможно и по другому,пока думаю)...и в потоке номер 1 ищем этот буфер...
насчет проверки изображения....в буфер обмена какой формат кладется?бмп?или другой?
так,берем описание формата,к примеру там сказано - 3 байт равен 'mz',сравниваем,если да - проверка,а нет...
|
|
|
|
DarkMaster |
2.5.2014, 0:44
|
          
Модератор UOPilot
Сообщений: 9.745
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29679
Пользователь №: 11.279

|
Цитата насчет проверки изображения....в буфер обмена какой формат кладется?бмп?или другой?
бмп, но их много разных всяких. Придется немного почитать про их структуру. Основной момент, который тебе необходим - это размер заголовка. Он разный, но данные о размере заголовка всегда находятся по одному смещению. После заголовка идет непосредственно Bitmap. Цитата после загрузки плагина вызываем скриптом функцию инициализации,в которой указываем число потоков данных,т.е например - stream.init(10),эта функция создает 10 потоков произвольного объема,дальше в поток номер 1 ложим большой скрин,а во все остальные потоки ложим искомые картинки А зачем в разных потоках хранить скрины? Я вообще не очень хорошо вижу смысл в такой многопоточности на данный момент. Она будет иметь смысл в 2 случаях: 1) Одна длл обрабатывает запросы со всех вкладок. Чтобы не делать очередь - распраллеливаем. Однако тут даже кнайт не взялся ответить о том, что каждая вкладка имеет копию длл или длл одна на пилот. 2) Делать вызов проверки изображения и не дожидаться его завершения, запрашивая его позже. Это может существенно увеличить скорость поиска нескольких изображений. А вот зачем хранить в разных потоках битмапы я вообще не очень понял... Ну сделай ты в общей области видимости unordered map хз какой аналог в делфи. Это несортированная хэш таблица(ассоциативный массив). Сделали запрос на поиск - создал поток, поток сравнил, дал результат.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|