Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Hito on September 16, 2019, 10:30:57 PM

Title: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 16, 2019, 10:30:57 PM
Ребят, прошу прощения за вопрос - на форуме наверняка есть ответ. Да и в справке наверняка что-то можно придумать. Но что-то так устал все выискивать, пробовать и тестить...  Может кто ответит? Вот есть функции в кликере:
Code: (clickermann) [Select]
$count = PXLCRC ($X1,$Y1, $X2,$Y2)
IF($count = 79389910)
   // Картинка найдена
END_IF
с помощью которых можно искать картинку на экране без самой картинки заготовленной. Но этот способ подходит, если картинку искать в четких координатах. А что можно придумать, что бы картинку можно было искать без заготовленного скрина, но не в четких координатах а в пределах этих координат?
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: dramster on September 17, 2019, 01:52:36 AM
вроде вот http://crapware.aidf.org/forum/index.php?topic=3743.0

Только вместо PXLXOR используй PXLCRC

Нужно знать только  код первого искомого пикселя.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 17, 2019, 12:39:27 PM
вроде вот http://crapware.aidf.org/forum/index.php?topic=3743.0

Только вместо PXLXOR используй PXLCRC

Нужно знать только  код первого искомого пикселя.
Ведь думал же об этом...))
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 17, 2019, 01:37:04 PM
Но если цвет первого пиксля картинки на экране встречается далеко не раз, то результат удручает...

13:35:12 Нашли обычным способом за 121 ms.
13:35:18 Нашли новым способом за 6353 ms.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: 4.У.В.@.К on September 18, 2019, 10:37:03 AM
Но если цвет первого пиксля картинки на экране встречается далеко не раз, то результат удручает...

Не всё так печально, скорее всего ты начал "плясать не от того угла", вернее не от того пикселя.
Кто сказал, что искомый пиксель обязательно должен быть верхним левым пикселем искомой картинки? Нужно из всех цветов этой картинки выбрать тот цвет, который меньше всего встречается в области GETSCREEN, а хеш примерять на найденный пиксель учитывая смещение. В идеале - искомый пиксель нигде на экране не встречается, кроме как на искомой картинке. Тогда поиск будет быстрым.

На скриншотах:
Весь скриншот это область GETSCREEN. Картинку ищем только в желтой незаштрихованной области. В заштрихованной зоне картинки быть не может, она там не умещается ни по ширине, ни по высоте.

Без смещения (искомый пиксель - верхний левый на картинке):
(https://s8.hostingkartinok.com/uploads/images/2019/09/15617f8a4703f9e0dfe8225257c35b40.png) (https://hostingkartinok.com/show-image.php?id=15617f8a4703f9e0dfe8225257c35b40)

Со смещением (искомый пиксель - посередине картинки):
(https://s8.hostingkartinok.com/uploads/images/2019/09/02f6714ec91a378523501bd4dd95d505.png) (https://hostingkartinok.com/show-image.php?id=02f6714ec91a378523501bd4dd95d505)
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 18, 2019, 01:07:22 PM
Но если цвет первого пиксля картинки на экране встречается далеко не раз, то результат удручает...

Не всё так печально, скорее всего ты начал "плясать не от того угла", вернее не от того пикселя.
Кто сказал, что искомый пиксель обязательно должен быть верхним левым пикселем искомой картинки? Нужно из всех цветов этой картинки выбрать тот цвет, который меньше всего встречается в области GETSCREEN, а хеш примерять на найденный пиксель учитывая смещение. В идеале - искомый пиксель нигде на экране не встречается, кроме как на искомой картинке. Тогда поиск будет быстрым.

На скриншотах:
Весь скриншот это область GETSCREEN. Картинку ищем только в желтой незаштрихованной области. В заштрихованной зоне картинки быть не может, она там не умещается ни по ширине, ни по высоте.

Без смещения (искомый пиксель - верхний левый на картинке):
(https://s8.hostingkartinok.com/uploads/images/2019/09/15617f8a4703f9e0dfe8225257c35b40.png) (https://hostingkartinok.com/show-image.php?id=15617f8a4703f9e0dfe8225257c35b40)

Со смещением (искомый пиксель - посередине картинки):
(https://s8.hostingkartinok.com/uploads/images/2019/09/02f6714ec91a378523501bd4dd95d505.png) (https://hostingkartinok.com/show-image.php?id=02f6714ec91a378523501bd4dd95d505)

Как быть с картинкой, в которой всего два цвета? Черный - фон картинки, и белый - надпись на фоне. И до этой картинки на экране полно черных и белых пикслей...
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Vint on September 18, 2019, 02:28:39 PM
Это самый плохой вариант для любого способа.
Но классический рулит.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: 4.У.В.@.К on September 18, 2019, 02:55:12 PM
Как быть с картинкой, в которой всего два цвета? Черный - фон картинки, и белый - надпись на фоне. И до этой картинки на экране полно черных и белых пикслей...

Ну, "запасный выход" еще никто не отменял. :)
А если серьезно - не видя того что ищем, скорее всего никак.
Пока понятно только то, что для поиска картинки с помощью PXLCRC(), изображение на экране не подготовлено. И можно ли как то на это повлиять - неизвестно.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 18, 2019, 04:09:03 PM
А если серьезно - не видя того что ищем, скорее всего никак.

Тут видеть особо нечего. Представь себе черный экран, на котором много разных белых надписей и тебе нужно найти одну из надписей, но сделать это без заранее заготовленной картинки.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: 4.У.В.@.К on September 18, 2019, 05:08:44 PM
Да уж представляю...
Если бы это был к примеру текст на веб-странице, то можно победить такое.
Иначе надо крепко репу чесать. Может кто что и придумает.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Vint on September 19, 2019, 02:25:36 PM
А в чём смысл отказа от IF_PICTURE_IN ? (написал сначала "сакральный", потом полез смотреть определение. ммм... короче я не совсем правильно понимал значение слова и беря во внимание автора темы, такие слова применять не совсем уместно.)

Или это не от него отказ, а только от графического хранения? Не очень понятны мотивы и цели.
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: Hito on September 19, 2019, 03:54:57 PM
Или это не от него отказ, а только от графического хранения?
Только от графического хранения )) Меньше файлов в проекте - всегда приятней )) Ну, как бы тема-то не критичная. Просто задумался...)
Title: Re: Есть ли возможность - находить картинку на экране без картинки?
Post by: 4.У.В.@.К on September 20, 2019, 09:21:23 AM
Есть еще вариант - для предварительного поиска нужной области использовать букву.
Находим в искомой фразе наиболее уникальную (для всей области поиска) букву.
Создаем в графическом буфере картинку, из "двоичного кода" этой буквы.
Сохраняем эту картинку на диск (куда ни будь во временную папку).
Выводим координаты всех вхождений этой картинки в массив.
Примеряем заранее заготовленный хеш на области в найденных координатах.

Пример создания картинки:
Code: (clickermann) [Select]
$str = "0111110011111001111100000110011101001110100000110" // строчная буква "ы"

$x = 1
$y = 1

FOR($n = 1, $n <= STRLEN($str))
   IF($x > 7)
      INC($y)
      $x = 1
   END_IF
   IF(STRCUT($str, $n, 1) = 1)
      PXLREPLACE($x,$y,$x,$y, -1, 0)
   ELSE
      PXLREPLACE($x,$y,$x,$y, -1, 16777215)
   END_IF
   INC($x)
END_CYC

SCREENSHOTFIX(1,1,7,7, "C:\Windows\Temp\~unnamed.bmp", 0)

HALT

Генерирование картинок скриптами обсуждалось здесь (http://crapware.aidf.org/forum/index.php?topic=4183.0).