|
Разработка findcolor, findimage, Pure lua |
|
|
|
  |
Ответов
DarkMaster |
27.3.2021, 13:42
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29621
Пользователь №: 11.279

|
Собственно то, как вот оно есть. findcolor manual
Код -- findcolor -- Функция поиска цвета либо нескольких цветов, -- с возможностью задать некоторые отклонения в оттенке. -- Синтаксис: -- result = findcolor(<x_start, y_start, x_end, y_end | table_crds>, -- <color> [,method [,count [,deviaton [,deviation_type [,abs_flag]]]]) -- -- <x_start, y_start, x_end, y_end | table_crds> -- Координтаы задаются в виде прямоугольной области -- с указанием координаты левого верхнего угла -- и правого нижнего угла. -- Координаты могут быть заданы четырмя переменными: -- x_start, y_start, x_end, y_end -- либо массивом с аналогичной структурой данных: -- {x_start, y_start, x_end, y_end} -- Отсчет координат начинатся с 0, а не 1. -- Т.е. для FullHD область поиска будет -- 0, 0, 1919, 1079. -- -- <color> -- Цвета, которые непосредственно ищются. -- Синтаксис списка цветов: -- <color | {color_1 [,color_2 [,... [,color_N]]]}> -- Допустимые форматы цвета: -- < dec_hex_color | dec_hex_color_1-dec_hex_color_2 | -- {[r=val_1] [,g=val_2] [,b=val_3]} | [{r=val_1-val_2] [,g=val_3-val_4] [,b=val_5-val_6}] > -- Форматы цветов можно кобинировать в рамках списка. Например: -- 133972, 0x5060DD-0x5170DD, {r=10, g=0xFF, b=12-18} -- -- [method] -- Метод поиска. Значение по умолчанию: 2 -- 0/не задан - Быстрый метод. Получить изображение всего экрана. -- 1 - устаревший метод, используется для совместимости. Очень медленный. -- Для получения изображения всего экрана, а не окна используйте abs_flag. -- 2 - надежный метод. Средняя скорость. -- Для получения изображения всего экрана, а не окна используйте abs_flag. -- хендла_окна - очень быстрый метод. Работает с перекрытыми окнами. -- Предпочтительно использовать именно его. Не работает с некоторыми приложениями. -- Для корректной работы может потребоваться задать хендл родительского окна. -- адрес_картинки - Адрес изображения в формате bmp 24 бита. -- "my_image.bmp" - изображение рядом с exe пилота. -- "folder\\my_image.bmp" - изображение в папке folder рядом с exe пилота -- "\\my_image.bmp" - изображение в корне диска, на котором лежит пилот. -- [[d:\uopilot\images\my_image.bmp]] - абсолютный путь. -- Учтите, что при задании адресов в lua символ '\' необходимо удваивать, -- либо заменять на '/', либо брать весь адрес в двойные квадртные скобки. -- адрес_памяти, - Поиск в ранее полученном изображении по средством функции getimage() -- высота_изобр, Указывается адрес битовой маски, высота изображения, ширина и количество -- ширина_изобр, байт на каждую строку. Из-за выравнивания размер строки может быть -- длина. не кратным битности изображения. Данный параметр так же используется -- для определения формата битовой маски (24 бита либо 24 бита цвет + 8 резерв). -- -- [count] -- Количество искомых изображений. 0 | -1 - найти все. -- -- [deviation] -- Допустимые отклонения цвета. -- Синтаксис: -- deviation_general | {blue, green, red} | -- {blue_bottom, green_bottom, red_bottom, blue_upper, green_upper, red_upper} -- Отклонения цвета может быть задано одним числом на все каналы в + и в -, -- либо на каждый канал отдельно, -- либо на каждый канал отдельно и отдельно нижняя и верхняя граница канала. -- -- [deviation_type] -- Тип расчета допустимого отклонения цвета. Значение по умолчанию "r". -- Возможные значения: -- "a" - absolute. Абсолютное отклонение канала. -- Например, при цвете 50 100 200 и абсолютном отклонении 10, -- допустимый диапазон цветов будет равен 40-60, 90-110, 190-210 -- "r" - relative. Относительное отклонение, задается в процентах. -- Например, при цвете 50 100 200 и относительном отклонении 10, -- допустимый диапазон цветов будет равен 45-55 90-110 180-220. -- Округление происход в сторону расширения диапазона. -- Например, при значении канала 101 и допустимом отклонении 10%, -- допустимыми значениями канала будут 101-11=90 101+11=112, т.е. 90-112. -- "s" - shadow. Затемнение/осветление. Рассчитывается соотношение каналов, задается в процентах. -- Данный метод может быть полезен, например, при смене суток в игре. -- В рамках данного метода цвет 50 100 200 и цвет 25 50 100 - будут полностью идентичны. -- Для указанных цветов: 200/50=4 50/100=0.5 100/200=0.5 -- 100/25=4 25/50=0.5 50/100=0.5 -- При допустимом отклонении в 10, будут считаться допустимыми соотношения каналов: -- 3.6-4.4 0.45-0.55 0.45-0.55 -- -- [abs_flag] -- Флаг указывающий на то, что изображение должно быть получено не относительно с окна -- к которому произведена привязка пилота через Ctrl+A или workwindow, -- а относительно левого верхнего угла экрана. -- Актуально для method 1, 2. Мной сознательно проигнорированы shift_x shift_y из стандартного финдколора, которые вроде как были призваны снизить нагрузку. Они реально нужны? Я просто их не использовал никогда ввиду того, что смысла в них не видел, скорости относительно хватало, а вот пропустить что-нибудь важное можно. Если надо - вкручу. Идеи/предложения/замечания? Сообщение отредактировал DarkMaster - 27.3.2021, 14:51
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Сообщений в этой теме
DarkMaster Разработка findcolor, findimage 24.3.2021, 18:01 sutra Я в теме. Я давно отказался от передачи массивов. ... 25.3.2021, 16:34 DarkMaster
Ловлю на слове. Пока хочу допилить, то, что есть,... 25.3.2021, 17:12 sutra Не помню сколько у меня на фул хд. Я же сказал при... 25.3.2021, 17:28 DarkMaster
Ты где тут нашел адекватного?) Ну а вообще тесты ... 25.3.2021, 17:28 sutra Да я понял, но у меня в основном нагрузка на файнд... 25.3.2021, 17:42 DarkMaster По поводу создания изображений и помощи валенкам у... 25.3.2021, 17:50 DarkMaster Из забавного. Речь пойдет о чтении из памяти данны... 26.3.2021, 0:34 sutra Ну вот, зачем спрашивается лопатить фул хд. Разбил... 26.3.2021, 16:43 DarkMaster ну вообще типа да, но типа нет. Поуму нужно делать... 26.3.2021, 16:49 sutra rmem ("unsigned char*",i)[2]
Я собствен... 26.3.2021, 17:07 DarkMaster Автор Cirus
--lua
local ffi = require("ffi... 26.3.2021, 17:31 sutra Понял лишь в общих чертах. Вопрос, а в файл сохран... 26.3.2021, 17:58 DarkMaster
Вот этот момент не совсем ясен. Почему 0 0? Почем... 26.3.2021, 18:00 sutra Я правильно понимаю, что мне надо добавить возврат... 26.3.2021, 18:11 DarkMaster Пока кроме скорости ничего не тестил, по идее он в... 26.3.2021, 18:15 sutra ОК. Буду ждать новостей. Cirus-у отдельное БОЛЬШОЕ... 26.3.2021, 18:16 cirus
Потому что 0 0 это координаты куда скопировать из... 27.3.2021, 1:59 DarkMaster Накидал кучу вопросов Cirus'у и надеюсь, что о... 27.3.2021, 11:41 cirus
--lua
local ffi = require("ffi")
... 27.3.2021, 21:21 sutra Дарк, прочитал мануал. Что точно нужно добавить - ... 28.3.2021, 10:15 sutra Для чего нужен шаг? Например для поиска активной р... 28.3.2021, 10:41 DarkMaster Как весело провести вечер и утро.
А знаете ли вы,... 28.3.2021, 12:31 sutra Попробовал новый getimage. Работает намного быстре... 28.3.2021, 13:43 DarkMaster
А максимума нет. Размер окна может быть намного б... 28.3.2021, 13:54 sutra Насколько я понимаю, по уму надо бы возвращать адр... 28.3.2021, 13:59 DarkMaster
Я так и делаю.
Все скоро будет =) 28.3.2021, 14:03 DarkMaster Бэкапу пару дней. !@#$ notepad++ 28.3.2021, 23:12 sutra А тут как дела? Подвижки есть? 29.3.2021, 15:11 DarkMaster
Есть, откатился из-за чудес выше до момента пока ... 29.3.2021, 15:51 DarkMaster Захват изображения. Вот так вроде похоже на правду... 29.3.2021, 17:09 Cockney
Ну и идейно я делаю замену пилотовских функций с ... 29.3.2021, 20:33 DarkMaster
Планов очень много, идей очень много. Я очень не ... 29.3.2021, 21:00 Cockney
Планов очень много, идей очень много. Я очень не ... 29.3.2021, 23:47 DarkMaster Если угодно - сглазить не хочу.
Блокнот реально по... 29.3.2021, 23:55 sutra Ну вот, я явился возмутителем спокойствия и благод... 30.3.2021, 11:51 sutra Попробовал сохранить картинку. Ничего не получилос... 30.3.2021, 13:16 cirus
Это начало bmp файла BM.
Указать другую папку, в... 30.3.2021, 13:43 sutra Создаёт файл 14 байт. Доступ к нему действительно ... 30.3.2021, 15:31 sutra Последовательно пишу заголовок. Перегружаю Пилот, ... 30.3.2021, 15:44 sutra Дарк, что-то я не понял как пользоваться твоим ими... 30.3.2021, 17:38 DarkMaster Значит так. Версия из активной разработки. Дальше ... 30.3.2021, 17:38 DarkMaster --lua
local ffi=require "ffi"
local rmem=... 30.3.2021, 17:46 sutra Ни хрена себе ты наворочал. Тут месяц надо разбира... 30.3.2021, 17:47 DarkMaster ext.lg - перекочевало из другого скрипта, в рамках... 30.3.2021, 17:47 sutra Конечно моё мнение субъективно. Но вот зачем вообщ... 30.3.2021, 18:16 DarkMaster
Идейно это был изначально возврат к пилотовскому:... 30.3.2021, 18:19 sutra Может не доглядел (тогда ткни меня носом), но не н... 30.3.2021, 18:34 DarkMaster По разности каналов не делал. В достаточно большой... 30.3.2021, 18:41 sutra Да я всё понимаю. Поэтому и не берусь претендовать... 30.3.2021, 18:43 DarkMaster Если есть любые идеи, как оно должно быть - готов ... 30.3.2021, 18:43 sutra Да, кстати. Что-то у меня не получилось сохранить ... 30.3.2021, 18:45 DarkMaster --lua
local ffi=require "ffi"
local rmem=... 30.3.2021, 18:54 sutra Вот объясните мне почему так? Просто хочу понять, ... 30.3.2021, 20:15 DarkMaster
Это является флагом писать строки сверху-вниз или... 30.3.2021, 20:18 sutra Спасибо, ну примерно так и подозревал. Плохо ничег... 30.3.2021, 20:22 DarkMaster
Ну да, самое крутое не знать и писать. Думаешь я ... 30.3.2021, 20:25 sutra Соответственно 32 битовая модель не требует контро... 30.3.2021, 20:30 Madeus speed = speed + os.clock() - t
Лишняя строчка?) 30.3.2021, 20:32 sutra Эх! Понять бы ещё почему у меня проблемы с зап... 30.3.2021, 20:36 DarkMaster
бенчмарк. Ну для релиза лишняя, для работы не сов... 30.3.2021, 20:42 sutra Перегруз не помог. Нарушается у меня доступ к запи... 30.3.2021, 20:44 Madeus
бенчмарк. Ну для релиза лишняя, для работы не сов... 30.3.2021, 20:59 DarkMaster Можно удалить. Мой код тестов:
speed = 0
catch = 0... 30.3.2021, 21:08 Madeus Если не указать [deviation] вылетает с ошибкой .lu... 30.3.2021, 21:19 DarkMaster
чуть выше писал, что на данный момент только со в... 30.3.2021, 21:27 Madeus У меня одного если не указать "abs" то и... 30.3.2021, 22:51 DarkMaster
Какой метод при поиске указан?
При методе 2 будет... 31.3.2021, 0:00 Madeus
Какой метод при поиске указан?
При методе 2 будет... 31.3.2021, 0:12 DarkMaster Это сделано исключительно для совместимости со ста... 31.3.2021, 0:23 DarkMaster Sutra, я тут в итоге все-таки наткнулся на один уж... 31.3.2021, 0:45 DarkMaster
Кстати низя. Ты никак диапазоном не задашь, что r... 31.3.2021, 2:06 Madeus
Метод 2, тогда понятно, хотя надо проверить скоро... 31.3.2021, 2:06 DarkMaster
В обоих случаях зоны имели одинаковые цвета?
Мето... 31.3.2021, 2:43 cirus
Сделать скрин и искать на скрине, быстрее будет. 31.3.2021, 3:01 DarkMaster 100 прогонов во всех тестах
Фулл хд. Абс выкл.
r ... 31.3.2021, 3:06 Madeus
В целом абс существенным образом не повлияло на о... 31.3.2021, 17:20 sutra
Спасибо Дарк. Конечно так я и сам могу, но по при... 31.3.2021, 11:27 DarkMaster Я его код не тестил. Мне скрины на тот момент были... 31.3.2021, 13:03 DarkMaster Накидал скринилку. Фиксировные битовые константы з... 31.3.2021, 17:44 Madeus
Только в случае, если используется метод 2 или ме... 31.3.2021, 17:51 sutra Тест старого и нового имиджа по хендлу
зона old ... 31.3.2021, 17:59 DarkMaster Круто я когда-то лажанул. Убрал объявление getimag... 31.3.2021, 18:07 Madeus
Круто я когда-то лажанул. Убрал объявление getima... 31.3.2021, 18:14 sutra Хотя тестить в lua - гиблое дело. Можно лишь прибл... 31.3.2021, 18:12 DarkMaster getimage 100 итераций
вызов + удаление изображения... 31.3.2021, 18:44 sutra Дарк, спасибо за скринилку. Всё, на сегодня хватит... 31.3.2021, 19:05 DarkMaster
На самом деле там проблема только одна - он делае... 31.3.2021, 19:23 Madeus Нужно добавить возврат координат найденного цвета,... 31.3.2021, 22:41 DarkMaster Функция возвращает таблицу найденных цветов:
x y ц... 31.3.2021, 23:23 Madeus Проблема в том что она возвращает x y относительно... 1.4.2021, 0:11 DarkMaster Вот для этого тесты и есть =)
Поправлю. Спасибо. 1.4.2021, 0:12 Madeus Супер, спасибо за труды! :) Ждем findimage B) 1.4.2021, 0:17 DarkMaster 1)+ Переделать метод 0 для поиска по относительным... 1.4.2021, 2:12 Madeus
У меня до сих пор тяжелые думы по поводу шага пои... 1.4.2021, 2:35 DarkMaster
Хмм.. Вообще я не то залил, но этот фикс вроде но... 1.4.2021, 2:49 cirus За всё время шаг поиска использовал только 1 раз. ... 1.4.2021, 3:02 Madeus То ли лыжы не едут то ли спать пора. В общем что у... 1.4.2021, 3:04 DarkMaster
И то и другое. Спать пора - я не ту версию залил,... 1.4.2021, 3:19
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|