Ahk если цвет пикселя
В целом код, похоже, верный.
По умолчанию у PixelGetColor порядок цветовых каналов BGR, а не RGB − попробуйте изменить команду PixelGetColor на PixelGetColor, color, 940, 385, RGB ИЛИ поменять проверяемый цвет на 0x4F4FC1 .
Добрый день! Спасибо большое за ответ. Всё равно бот не работает ни так, ни так.
Может я неверно указал координаты пикселя?
Как можно задать область пикселей? (чтобы проверял по всем прицелу)
Может я неверно указал координаты пикселя?
Как можно задать область пикселей? (чтобы проверял по всем прицелу)
Может быть. Если скриншоты выше сделаны вами, то есть два заслуживающих внимания момента:
1. Прицел расположен точно по центру экрана, размер скриншота − 1920×1080, положение прицела: 960:540.
2. Судя по размеру скриншотов, игра работает в полноэкранном режиме. В этом случае PixelGetColor может неверно определять цвет. Можно попробовать добавить ему режим Alt или Slow.
Проверять область пикселей можно командой PixelSearch, но она медленнее, плюс могут быть ложные срабатывания, если вы навели прицел на что-то красное, а область поиска велика.
Для отладки можно проверять цвет пикселя, например, через TrayTip или, для проверки работоспособности в полноэкранном режиме, звуковой сигнал:
Может я неверно указал координаты пикселя?
Как можно задать область пикселей? (чтобы проверял по всем прицелу)
Может быть. Если скриншоты выше сделаны вами, то есть два заслуживающих внимания момента:
1. Прицел расположен точно по центру экрана, размер скриншота − 1920×1080, положение прицела: 960:540.
2. Судя по размеру скриншотов, игра работает в полноэкранном режиме. В этом случае PixelGetColor может неверно определять цвет. Можно попробовать добавить ему режим Alt или Slow.
Проверять область пикселей можно командой PixelSearch, но она медленнее, плюс могут быть ложные срабатывания, если вы навели прицел на что-то красное, а область поиска велика.
Для отладки можно проверять цвет пикселя, например, через TrayTip или, для проверки работоспособности в полноэкранном режиме, звуковой сигнал:
Правд иногда почему то "зависает" и перестает реагировать. Или может вдруг начать стрелять "одиночными" выстрелами, а не очередью. Почему так?
Имена переменных, в которые помещаются координаты X и Y первого найденного пикселя, отвечающего идентификатору цвета ColorID (если не находится соответствий, переменные будут пустыми). Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Любой из этих параметров (или оба) можно оставить пустым, в случае, когда используется ErrorLevel (см. ниже) для определения наличия соответствий.
Координаты X и Y верхнего левого угла прямоугольной области поиска, могут быть выражениями.
Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Координаты X и Y правого нижнего угла прямоугольной области поиска, могут быть выражениями.
Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Идентификатор цвета в десятичном или шестнадцатеричном формате Синий-Зелёный-Красный (BGR), может быть выражением.
Color ID можно определить, используя приложение Window Spy (доступно из меню в области уведомлений) или через команду PixelGetColor. Например: 0x9d6346
Число от 0 до 255 включительно. Указывает допустимое отклонение от заданного цвета (диапазон оттенков) для красной, зелёной и синей составляющих (может быть выражением). Этот параметр полезен, если искомый цвет находится в определённом интервале оттенков. Если задать диапазон оттенков 255, все цвета будут отвечать этим условиям. По умолчанию равен 0.
Fast: Используется более быстрый метод. Быстрый режим лучше работает с 24 и 32-битными цветами. При быстром режиме просматривается ряд за рядом (сверху вниз) вместо столбца за столбцом. Поэтому, если условиям отвечают несколько пикселей, может быть найден не тот пиксель, что в медленном режиме.
RGB: Значение параметра ColorID будет восприниматься в формате RGB вместо BGR. Другими словами, красная и синяя составляющие меняются местами.
Если присутствуют оба слова- разделяйте их пробелом: Fast RGB.
Parameters
The names of the variables in which to store the X and Y coordinates of the first pixel that matches ColorID (if no match is found, the variables are made blank). Coordinates are relative to the active window unless CoordMode was used to change that.
Either or both of these parameters may be left blank, in which case ErrorLevel (see below) can be used to determine whether a match was found.
The X and Y coordinates of the starting corner of the rectangle to search, which can be expressions. Coordinates are relative to the active window unless CoordMode was used to change that.
The X and Y coordinates of the ending corner of the rectangle to search, which can be expressions. Coordinates are relative to the active window unless CoordMode was used to change that.
The decimal or hexadecimal color ID to search for, in Blue-Green-Red (BGR) format, which can be an expression. Color IDs can be determined using Window Spy (accessible from the tray menu) or via PixelGetColor. For example: 0x9d6346 .
A number between 0 and 255 (inclusive) to indicate the allowed number of shades of variation in either direction for the intensity of the red, green, and blue components of the color (can be an expression). For example, if 2 is specified and ColorID is 0x444444, any color from 0x424242 to 0x464646 will be considered a match. This parameter is helpful if the color sought is not always exactly the same shade. If you specify 255 shades of variation, all colors will match. The default is 0 shades.
This parameter may contain the word Fast, RGB, or both (if both are present, separate them with a space; that is, Fast RGB).
Note: The default Slow mode is unusable on most modern systems due to an incompatibility with desktop composition, which causes it to be orders of magnitude slower.
RGB: Causes ColorID to be interpreted as an RGB value instead of BGR. In other words, the red and blue components are swapped.
Известные ограничения:
- Окно, которое является частично прозрачным или имеет один из своих цветов, помеченных как невидимые (TransColor), обычно дает цвета для окна позади себя, а не его собственного.
- PixelGetColor может не давать точных результатов для определенных приложений. Если это произойдет, попробуйте указать слово Alt или Slow в последнем параметре.
Примечания
Участок поиска должен быть видим; иначе говоря, невозможно провести поиск в части окна, перекрытой другим окном. Напротив, пиксели под курсором мыши обычно определяются. Исключение – игровые курсоры, в большинстве случаев скрывающие пиксели под собой.
Только для медленного режима: По умолчанию поиск начинается с левого верхнего пикселя вниз. Если соответствий не найдено, поиск продолжается в следующей, правой колонке, и т.д. Направление поиска изменится, если поменять местами координаты X1 и X2 в списке параметров.
Так же, если Y1 больше, чем Y2, поиск в каждом столбце пикселей будет начат снизу, а не сверху.
Если область поиска большая и поиск повторяется с большой частотой- может потребляться много времени ЦП. Для повышения быстродействия старайтесь минимизировать область поиска.
ErrorLevel
ErrorLevel устанавливается в 0, если цвет в заданной области был найден; 1 - если не был найден; 2 - если возникла проблема, препятствующая проведению поиска.
Error Handling
[v1.1.04+] : This command is able to throw an exception if there was a problem while searching. For more information, see Runtime Errors.
ErrorLevel is set to 0 if the color was found in the specified region, 1 if it was not found, or 2 if there was a problem that prevented the command from conducting the search.
Remarks
The region to be searched must be visible; in other words, it is not possible to search a region of a window hidden behind another window. By contrast, pixels beneath the mouse cursor can usually be detected. The exception to this is cursors in games, which in most cases will hide any pixels beneath them.
The search order depends on the order of the parameters. In other words, if X1 is greater than X2, the search will be conducted from right to left, starting at column X1. Similarly, if Y1 is greater than Y2, the search will be conducted from bottom to top. However, prior to [v1.1.32] , the fast mode required X1 and Y1 to be the top-left corner.
Fast mode: The search starts at the coordinates specified by X1 and Y1 and checks all pixels in the row from X1 to X2 for a match. If no match is found there, the search continues toward Y2, row by row, until it finds a matching pixel.
Slow mode: The search starts at the coordinates specified by X1 and Y1 and checks all pixels in the column from Y1 to Y2 for a match. If no match is found there, the search continues toward X2, column by column, until it finds a matching pixel.
If the region to be searched is large and the search is repeated with high frequency, it may consume a lot of CPU time. To alleviate this, keep the size of the area to a minimum.
ErrorLevel
ErrorLevel устанавливается в 0, если изображение в заданной области было найдено; 1 – если не было найдено; 2 – если возникли проблемы, препятствующие проведению поиска (такие как ошибка при открытии файла изображения или неверное оформление опций).
Examples
Searches a region of the active window for a pixel and stores in Px and Py the X and Y coordinates of the first pixel that matches the specified color with 3 shades of variation.
Related
Примеры
ImageSearch, FoundX, FoundY, 40,40, 300, 300, C:\My Images\test.bmp CoordMode Pixel ; Отсчитывает нижеследующие координаты относительно экрана (вместо активного окна). ImageSearch, FoundX, FoundY, 0, 0, A_ScreenWidth, A_ScreenHeight, *Icon3 %A_ProgramFiles%\SomeApp\SomeApp.exe if ErrorLevel = 2 MsgBox Произвести поиск невозможно. else if ErrorLevel = 1 MsgBox Изображение не найдено на экране. else MsgBox Изображение найдено в координатах x=%FoundX%, y=%FoundY%.
Searches a region of the screen for a pixel of the specified color.
ErrorLevel
ErrorLevel устанавливается в 0, если цвет в заданной области был найден; 1 - если не был найден; 2 - если возникла проблема, препятствующая проведению поиска.
Параметры
OutputVar | Имя переменной, в которой хранится идентификатор цвета в шестнадцатеричном сине-зелено-красном (BGR) формате. Например, фиолетовый цвет определяется как 0x800080, потому что он имеет интенсивность 80 для своих синих и красных компонентов, но интенсивность 00 для его зеленых компонентов. |
X, Y | Координаты X и Y пикселя, которые могут быть выражениями. Координаты относятся к активному окну, если CoordMode не использовался, чтобы изменить это. |
Mode | Этот параметр может содержать ноль или более следующих слов. Если присутствует более одного слова, отделяйте каждое от следующего пробелом (например, Alt RGB). - Alt [v1.0.43.10 +]: использует альтернативный метод для получения цвета, который следует использовать, когда обычный метод создает недопустимые или неточные цвета для определенного типа окна. Этот метод примерно на 10% медленнее, чем обычный метод. - Slow [v1.0.43.10 +]: использует более сложный метод для получения цвета, который может работать в определенных полноэкранных приложениях, когда другие методы не работают. Этот метод примерно в три раза медленнее, чем обычный метод. Примечание. Slow имеет приоритет над Alt, поэтому нет необходимости указывать Alt в этом случае. - RGB: получает цвет в формате RGB или BGR. Другими словами, красный и синий компоненты поменялись местами. Это полезно для получения цветов, совместимых с WinSet, Gui, Progress и SplashImage. |
Примечания
Команда ImageSearch может быть использована для обнаружения на экране графических объектов, в которых отсутствует текст (или когда извлечь его затруднительно). К примеру, ImageSearch можно использовать, чтобы выяснить позицию картинок-кнопок, значков, web-ссылок или игровых объектов. Зная расположение объектов, можно щёлкнуть по ним при помощи команды Click.
Иногда удобнее искать не всё изображение, а его небольшую часть. Это может повысить надёжность, когда в целом изображение изменяется, но отдельные его участки остаются неизменными.
Один из способов извлечь часть изображения:
- Нажмите Alt+PrintScreen когда изображение видно в активном окне. Снимок экрана будет помещён в буфер обмена.
- Откройте программу обработки изображений, к примеру Paint.
- Вставьте содержимое буфера (то есть снимок экрана).
- Выберите часть изображения, которая не изменяется и не повторяется.
- Скопируйте нужный фрагмент и вставьте его в новый документ.
- Сохраните его в виде маленького файла для использования командой ImageSearch.
Чтобы соответствовать поисковому запросу, изображение на экране должно быть таких же размеров, что и загруженное с использованием параметра imageFile и его опций.
Участок поиска должен быть видим; иначе говоря, невозможно провести поиск в части окна, перекрытой другим окном. Напротив, изображения под курсором мыши обычно определяются. Исключение – игровые курсоры, в большинстве случаев скрывающие изображения под собой.
Поиск начинается с верхнего ряда участка и продвигается вниз, поэтому, если имеется более одного соответствия, найдено будет ближайшее к верхней границе участка.
Значки, содержащие прозрачный цвет, позволяют этому цвету совпадать с любым цветом на экране. Поэтому цвет того, что находится за значком, не имеет значения.
Вы можете использовать опцию диапазона оттенков (*n), чтобы сделать режим поиска менее придирчивым.
Если изображение на экране полупрозрачно, ImageSearch, вероятно, не сможет его найти. Чтобы обойти это препятствие, попробуйте использовать опцию диапазона оттенков (*n) или сделайте окно непрозрачным при помощи WinSet, Transparent, Off.
Обработка ошибок
Пиксель должен быть видимым; другими словами, невозможно получить цвет пикселя окна, скрытого за другим окном. Напротив, пиксели под курсором мыши обычно могут быть обнаружены. Исключением являются игровые курсоры, которые в большинстве случаев будут скрывать любые пиксели под ними.
Используйте Window Spy (доступно в меню иконки в трее) или пример в нижней части этой страницы, чтобы определить цвета в настоящее время на экране.
Пример
PixelSearch, Px, Py, 200, 200, 300, 300, 0x9d6346, 3, Fast if ErrorLevel MsgBox, Требуемый цвет в заданных границах не найден. else MsgBox, Цвет, отвечающий требованиям, обнаружен в координатах X%Px% Y%Py%.
Получает цвет пикселя по указанным координатам X и Y.
Примеры
^!z:: ; Control+Alt+Z MouseGetPos, MouseX, MouseY ; определяем координаты мыши PixelGetColor, color, %MouseX%, %MouseY% ; MsgBox Цвет пикселя на позиции курсора - %color%. return
Имена переменных, в которые помещаются координаты X и Y верхнего левого пикселя изображения, найденного на экране (если не находится соответствий, переменные будут пустыми). Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Любой из этих параметров (или оба) можно оставить пустым, в случае, когда используется ErrorLevel (см. ниже) для определения наличия соответствий.
Координаты X и Y верхнего левого угла прямоугольной области поиска, могут быть выражениями.
Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Координаты X и Y правого нижнего угла прямоугольной области поиска, могут быть выражениями.
Координаты отсчитываются относительно активного окна, если только это не изменено командой CoordMode.
Имя файла изображения. Если не задан полный путь, подразумевается, что файл находится в папке, указанной в переменной %A_WorkingDir%.
Поддерживаются изображения формата GIF, JPG, BMP, ICO, CUR, ANI, PNG, TIF, Exif, WMF и EMF. Разрядность цвета изображений BMP должна быть 16 бит или выше
Несколько строк, перечисленных ниже, могут присутствовать перед именем файла. Каждую опцию следует отделять одним пробелом или табуляцией. Например: *2 *w100 *h-1 C:\Main Logo.bmp
*IconN: Чтобы помимо первой группы значков (иконок) использовать и другие, укажите сразу после *Icon номер группы. Например, *Icon2 загрузит значок по умолчанию из второй группы.
*n (диапазон оттенков): Число от 0 до 255 включительно. Указывает допустимое отклонение от заданного цвета для красной, зелёной и синей составляющих цвета каждого пикселя. Например, *2 допускает отклонение на две единицы. Этот параметр полезен, когда оттенок искомого изображения находится в некотором интервале. Или если используется формат, который не очень точно отображает картинку на экране (такой как GIF или JPG). Если задать диапазон оттенков 255, все цвета будут отвечать этим условиям. По умолчанию принимает значение 0.
*TransN: Эта опция упрощает поиск. Укажите в пределах изображения один цвет, который на экране может принимать любое значение. Используется, как правило, для поиска изображений формата PNG, GIF и TIF, имеющих прозрачные участки (для значков эта опция не требуется, так как их прозрачность определяется автоматически). Для файлов GIF скорее всего сработает *TransWhite. Для файлов PNG и TIF – *TransBlack. Иначе укажите в качестве N другое название цвета или значение в формате RGB (см. таблицу цветов или используйте команду PixelGetColor в режиме RGB). Примеры: *TransBlack, *TransFFFFAA, *Trans0xFFFFAA.
*wn и *hn: Ширина и высота, под которые масштабируется изображение (эти размеры также определяют, который значок будет загружен из файла ICO). Если обе опции опущены, значки, загружаемые из файлов ICO, DLL или EXE будут приведены к системному размеру маленьких значков по умолчанию, который обычно составляет 16 на 16 пикселей (чтобы принудительно использовать действительный/внутренний размер, укажите *w0 *h0). При загрузке изображений, не являющихся значками (иконками), используются их действительные размеры. Чтобы сжать или растянуть изображение, сохраняя пропорции, укажите -1 для одного размера и положительное число для другого. Например, если указать*w200 *h-1, ширина изображения составит 200 пикселей, а высота будет установлена автоматически.
Читайте также: