|
Findcolor спятил.. ¯\_(ツ)_/¯ |
|
|
Fors1k |
4.12.2018, 0:00
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2397
Пользователь №: 18.746
|
Код: Код set #a findcolor (664, 569 701, 877 1 1 (32768) %a workwindow -1 17) get color #color %a [1 1], %a [1 2] workwindow log color is #color Лог: Код Попросил искать 32768, а он находит 107, и считает, что сделал все как я хотел..
--------------------
Для связи
|
|
|
|
Fors1k |
4.12.2018, 2:51
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2397
Пользователь №: 18.746
|
Цитата(cirus @ 4.12.2018, 1:55) Findcolor и findimage фиксились, а color нет. В get color не учитывается рамка окна, т. е. он проверяет цвет левее и выше чем надо.
Спасибо за инфу про гет колор. Пока ждал ответа, проблема решилась, сменой отклонения с 17 на 15. Но разобраться очень хотелось, и я решил добить вопрос, так как нужного цвета на экране нет) Исходя из новой информации цвет проверил иначе: Код set #a findcolor (664, 569 701, 877 1 1 (32768) %a workwindow -1 17) move %a [1 1], %a [1 2] sendex ^a Пилот показал темно-зеленый цвет. Я искал зеленый цвет, и , оказалось, пиксель на границе черной буквы, и желтого фона дает зеленый цвет=)
--------------------
Для связи
|
|
|
|
Fors1k |
4.12.2018, 14:33
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 2397
Пользователь №: 18.746
|
Цитата(cirus @ 4.12.2018, 3:20) При погрешности цвета в 17% может много чего найтись.
Ой, так я мучаюсь с файндколором.. То не видит цвет, то видит там, где его нет.. Причем на тесте все идеально, а когда пускаю в работу, и отхожу от компа, вечером проверяю, и иногда вижу, что он делал что хотел..( Цитата(DarkMaster @ 4.12.2018, 13:00) Переводите числа в hex, раскладывайте на каналы, считайте. В десятичной системе данные не наглядны из-за особенностей формирования числа. Хотя конкретно этот пример подзрителен.
Это даст безошибочную работу файндколора? Куда вписать heх код цвета, если в вики сказано, что fc понимает только десятичный код? Расскажи поподробнее плиз.
--------------------
Для связи
|
|
|
|
DarkMaster |
4.12.2018, 15:01
|
Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27681
Пользователь №: 11.279
|
Цитата Это даст безошибочную работу файндколора? Это даст понимание того, что вы делаете. Всего есть три канала: Red, Green, Blue. Каждый канал кодируется значением от 0 до 255, т.е. в шестнадцатиричном виде это будет от 0x00 до 0xFF (0x - говорит о том, что это шестнадцатиричное значение). После чего значения всех каналов собираются вместе. В пилоте порядок каналов не RGB, а BGR. Это связано с виндовым api (так работет шустрее). Т.е.: R=0x88 G=0xAA B=0xFF Полчается: 0xFFAA88 После чего получившееся число предобразовывается в десятичный вид. % отклонения (deviation) рассчитывается от значения каждого канала в отдельности. Т.е.% R=0x88 +/- 255 / 100 * deviation G=0xAA +/- 255 / 100 * deviation B=0xFF +/- 255 / 100 * deviation Очевидно, что математически это совсем не равно (для любой системы счисления): 0xFFAA88 +/- 255 / 100 * deviation Поэтому для числа: 0x000001 погрешность 1% привидет к диапазону: 0x000000 0x020203 В десятичном виде: от 1 до 131 073 Вполне очевидно, что без разложения на каналы 1% тут никак не получается. Автоматизация преобразований: https://forum.uokit.com/index.php?showtopic=22116// Вообще 17% это очень дофига. Очень. Это +/-17%, т.е. 34% всего возможного диапазона цветов. Скорее всего имеет смысл изменить искомый цвет либо задать дипазоны для каждого канала в отдельности.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
5.12.2018, 1:07
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Цитата 2775296 На счёт get color ничего сказать не могу, я им вообще не пользуюсь, хотя Ваш пример у меня отработал корректно. А вот по поводу findcolor, ну прямо как в воду глядел, именно 17% погрешность и сыграла с Вами злую шутку. Код log clear set #r colortored(32768) set #g colortogreen(32768) set #b colortoblue(32768) log #r #g #b // значения RGB: 0 128 0 set #r2 colortored(2775296) set #g2 colortogreen(2775296) set #b2 colortoblue(2775296) log #r2 #g2 #b2 // значения RGB: 0 89 42 end_script А вот если бы Вы использовали поиск по диапазону RGB то пиксель был бы проигнорирован: Код set #a findcolor (664, 569 701, 877 1 1 (R(0-15)G(88-168)B(0-15)) %a workwindow -1) Лично моё мнение, использование deviation действительно реально работает и решает свою задачу только в findimage. В findcolor в подавляющем большинстве случаев бесполезный параметр, да ещё и ставящий в тупик многих пользователей, если они досконально не просчитали что будет искаться. Как правило, ищется одна, максимум две цветовых составляющих, влияющих на искомый цвет. Исключение, если искать белый или чёрный цвет, ну или оттенки серого, где все три составляющие RGB имеют практически одинаковые значения. Во всех остальных случаях лучше использовать диапазон RGB. Если же искомый цвет однозначно известен, deviation так же не нужен. А вот для Кнайта кстати есть пожелание. Я то конечно пользуюсь Шопом, но думаю многим было бы удобней, если бы помимо цифрового значения цвета, которое на вскидку не даёт понимания цвета, показывались бы значения RGB (при выборе Ctrl-A), ну или можно было бы настроить вывод по желанию, либо так, либо так.
|
|
|
|
cirus |
5.12.2018, 2:05
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26703
Пользователь №: 16.971
Возраст: 29
|
Цитата К кнайту вопрос может быть только в том, что get color мне не позволил сразу узнать код цвета, который fc нашел, и в этом плане хорошо бы его поправить. Ничерта не понял smile.gif Может это потому, что я не кнайт, но у меня есть сомнения. Код // сделать привязку Ctrl+A get color #color1 100 200 get color #color2 100 200 workwindow log #color1 #color2 // разные цвета end_script Они будут одинаковые, если у окна нет рамки, например, рабочий стол. Если указывается хендл, то надо к координатам прибавлять ширину и высоту рамки. Т. е. проверять не в координатах 100 200, а к примеру 108 231. Т. е. цвет проверяется не от левого верхнего угла клиента, а левого верхнего угла рамки окна. Из-за этого идёт смещение координат. Вот это надо исправить. В той же мозиле понажимай Ctrl+A чуть левее окна, координата X будет отрицательной, вот это тоже надо учитывать.
|
|
|
|
sutra |
5.12.2018, 3:18
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Извиняюсь перед коллегой, я нашёл причину, и причина fc Код log clear // сделать привязку Ctrl+A к клиенту set #a findcolor (100, 20 100, 20 1 1 (R(0-255)) %a workwindow -1) log %a[1 1] %a[1 2] %a[1 3] // 100 20 0 set #b findcolor (100, 20 100, 20 1 1 (R(0-255)) %b 2 -1) log %b[1 1] %b[1 2] %b[1 3] // 100 20 16777215 end_script Цвет разный (белый и чёрный), а координаты вернулись одинаковые. Подводя итог, при данной реализации финда, привязку к клиенту делать нежелательно и нельзя, если требуются координаты найденных пикселей!!! Уже извинился за свой бред, но и здесь будет не лишним ещё раз извиниться!!!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|