Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31

Поиск пиксела на экране

23.03.2015, 20:39. Показов 6425. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нашел тему.
вот топик.
Удалено
 Комментарий модератора 
Правила 5.8 Запрещено публиковать ссылки на другие форумы, а также их пропаганда.

Вот скрипт... но он ищет синею точку на картинке...
Помогите переделать на этом же языке PureBasic. чтоб поиск производился на определенных координатах
на Экране.. и искал красный пиксель.
и как найдет чтоб курсор переместился на него..
Я понимаю что я ЛОЛ...но не откажите..
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
EnableExplicit
 
#file = "D:\purebasic\pixel_finder\pixel.png"
#image = 0
#color_to_find = 16711680 ;000 000 255
 
UsePNGImageDecoder()
 
If LoadImage(#image, #file)
  Define x_counter.i = 0
  Define y_counter.i = 0
  If StartDrawing(ImageOutput(#image))
    For x_counter = 0 To ImageWidth(#image) - 1
      For y_counter = 0 To ImageWidth(#image) - 1
        If Point(x_counter, y_counter) = #color_to_find
          Debug "Finded BLUE Pixel at: " + Str(x_counter + 1) + " " + Str(y_counter + 1)
          Break
        EndIf
      Next
    Next
    StopDrawing()
  EndIf
  FreeImage(#image)
EndIf
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2015, 20:39
Ответы с готовыми решениями:

Цвет пиксела на экране
Помогите, пожалуйста, сделать по-нормальному программу. В инете видел несколько примеров, но у меня они почему-то не работают. Мне нужно,...

Утечка памяти при мониторинге пиксела на экране
Здравствуйте. Таймер с интервалом 100 (С интервалом в 1000, тот же результат, только медленней). Постоянно следит за определенным пикселем...

Цветовой детектор - отслеживание цвета пиксела на экране
Нужно на C# сделать программу, которая в определенной позиции (например x=100, y=100) экрана будет считывать цвет пикселя. И если будет...

26
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 08:05
Цитата Сообщение от MyStErI Посмотреть сообщение
чтоб поиск производился на определенных координатах
на Экране.. и искал красный пиксель.
и как найдет чтоб курсор переместился на него..
Один из вариантов решения + клик на цвете
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
;Ищет пиксель указанного цвета в указанной прямоугольной области экрана и ставит там курсор.
Procedure PixelSearch( left.i, top.i, right.i, bottom.i, color.l )
 
 DC=GetDC_(GetCapture_()) ; Дескриптор захваченного мышкой окна
  If DC
    For i=left To right
      For j=top To bottom
        If color = GetPixel_(DC,i,j)
          SetCursorPos_(i,j)            ; Перемещаем курсор в найденную позицию
          ReleaseDC_(GetCapture_(),DC)  ; освобождает контекст устройства
          ProcedureReturn 1           ; выход из процедуры при первом совпадении
        EndIf  
      Next
    Next
      
  EndIf
  
EndProcedure
; Авто mouse клик left button
Procedure Click_L_Mouse()
     mouse_event_(#MOUSEEVENTF_LEFTDOWN,0,0,0,0):Delay(10)  
     mouse_event_(#MOUSEEVENTF_LEFTUP,0,0,0,0):Delay(10)  
EndProcedure
; Авто mouse клик right button
Procedure Click_R_Mouse()
    mouse_event_(#MOUSEEVENTF_RIGHTDOWN,0,0,0,0):Delay(10)  
    mouse_event_(#MOUSEEVENTF_RIGHTUP,0,0,0,0):Delay(10)  
EndProcedure
 
; Проверка работы кода
 
ExamineDesktops() ; Если ищем цвет на всём экране монитора, иначе не надо
 
If PixelSearch(1,1,DesktopWidth(0),DesktopHeight(0),RGB(255,0,0)) ; красный цвет ищем
  ; Если цвет нашёл, то
  ; Кликнул мышкой по цвету
    Click_L_Mouse() ; !!!При запуске в IDE Пурика найдет иконку окна и откроет меню!!!
EndIf
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
24.03.2015, 08:12
Намного быстрее использовать GetDiBits
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
24.03.2015, 09:17  [ТС]
Pro_grammer, Извините не пойму...ничего не ищет..
можно попросить ваш исход и скомплирированый файл.?
чтоб я мог понять..вроде ничего сложного но не ищет...
Заранее Огромное СПС.

Добавлено через 2 минуты
да и можно чтоб искал в координатах.. (1024, 768)
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 09:34
Цитата Сообщение от MyStErI Посмотреть сообщение
Извините не пойму...ничего не ищет..
можно попросить ваш исход и скомплирированый файл.?
Как вы пытаетесь использовать этот код? Исходник я дал, компилировать его нет смысла, т.к. он отрабатывает за доли секунды, и после запуска сразу завершается. Если нужен постоянный мониторинг экрана, то нужно запускать в цикле, обрабатывать события, в общем писать программу, а этот код - просто принцип, не для практического применения.
Прикрепите к своему сообщению кусок скриншота, где есть объект, который надо найти. Посмотрю, какой там реально цвет надо искать.

Цитата Сообщение от MyStErI Посмотреть сообщение
чтоб искал в координатах.. (1024, 768)
Это координаты вашего экрана? В коде именно так и сделано. Определяются координаты любого экрана и поиск идет по всем до первого совпадения.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
24.03.2015, 09:55  [ТС]
координаты моего экрана 1360х768
Вот скрин...

Я так понял его надо зациклить в постоянный поиск..
если можно сделайте..

Добавлено через 3 минуты
тоисть в нутри квадрата

Добавлено через 2 минуты
Если красный пиксель на Autoit (0xFF0000) то на PureBasic RGB(255,0,0)
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 10:37
Цитата Сообщение от MyStErI Посмотреть сообщение
Если красный пиксель на Autoit (0xFF0000) то на PureBasic RGB(255,0,0)
На скрине вообще нет строго красных пикселей. В Autoit PixelSearch ищет не строго красный цвет (0xFF0000) или RGB(255,0,0), а с допуском -+ 40
PixelSearch(300, 300, 999, 999, 0xff0000, 40, 2)

На скрине красные прямоугольники содержат цвет RGB(228,39,67), по нему и можно искать.
Цитата Сообщение от MyStErI Посмотреть сообщение
Я так понял его надо зациклить в постоянный поиск..
если можно сделайте.
Можно то можно, но цикл это ведь не всё. Что надо сделать после того как цвет нашли, просто установить курсор и всё? Как то организовать выход из программы, какие то горячие клавиши назначить, или что?
В общем много всяких нюансов. И в конечном итоге получается, что я пишу совершенно не нужную мне программу от начала и до конца
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
24.03.2015, 11:21  [ТС]
Суть такова...запускаем скрипт..после того как запустили...
нажимаем например F1.- скрипт начал искать пиксель красного цвета...
как находит нажимает ЛКМ...и дальше он снова находится в поиске пикселя..
до тех пор пока не закроем программу или не выйдем из цикла по клавише F2..
для примера выложу скрипт Autoit..

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
 If $Autot = 1 then; Снайперки Винт и Дробовик  =================================300, 50, 534, 392,
PixelSearch(640, 258, 719, 402, 0xFF0000,0);PixelSearch(расстояние влево, верх, право, низ, красный цвет, 40, 2)
    If Not @error then
     ;  AutoItSetOption ("MouseClickDownDelay",40)
      ; AutoItSetOption ("SendKeyDowDelay",30)
$hDLL = MouseClick("left")
$hDLL = Send("{q}")
$hDLL = Send("{q}")
    AutoItSetOption ("MouseClickDownDelay",30);
    AutoItSetOption ("SendKeyDownDelay",30)
  EndIf
EndIf
Добавлено через 4 минуты
поиск пикселя производиться в нутри красного прямоугольника...
и как нашел клик..и так далее...и как нашел клик...и так далее..
https://www.dropbox.com/s/obac... D.png?dl=0

Добавлено через 3 минуты
скрин сделан на разрешение экрана..1360х768..
а внутри красного квадрата координаты приблизительно такие
(640, 258, 719, 402) расстояние влево, верх, право, низ

Добавлено через 6 минут
Простыми словами автовыстрел..
при попадении в центр экрана красного пикселя он жмет ЛКМ..
0
Эксперт по электронике
6574 / 3201 / 335
Регистрация: 28.10.2011
Сообщений: 12,482
Записей в блоге: 7
24.03.2015, 11:21
Цитата Сообщение от Pro_grammer Посмотреть сообщение
If color = GetPixel_(DC,i,j)
Будет медленно работать.
Быстре сделать скин и пройтись по нему функциями библиотеки 2D Drawing.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 11:35
Цитата Сообщение от MyStErI Посмотреть сообщение
скрипт начал искать пиксель красного цвета
Игра Point Blank?
А зачем искать в таком широком диапазоне (640, 258, 719, 402) если прицел всегда в одном и том же месте экрана, а именно в центре? Красные прямоугольники тоже всегда возникают всегда в одном месте относительно центра и достаточно отследить одну точку из этого места и нажать ЛКМ?

Цитата Сообщение от MyStErI Посмотреть сообщение
для примера выложу скрипт Autoit
Так и пусть будет Autoit, для чего Пурик, если вообще не знаете как на нём программировать?

Добавлено через 7 минут
Версия упрощенная, нет способа завершить, кроме как в диспетчере задач.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
;Ищет пиксель указанного цвета в указанной прямоугольной области экрана
Procedure PixelSearch( left.i, top.i, right.i, bottom.i, color.l )
 
 DC= CreateDC_("DISPLAY",0,0,0); Дескриптор экрана
  If DC
    For i=left To right
      For j=top To bottom
        If color = GetPixel_(DC,i,j)
             DeleteDC_(dc)                 ; освобождает контекст устройства
          ProcedureReturn 1           ; выход из процедуры при первом совпадении
        EndIf  
      Next
    Next
      
  EndIf
  DeleteDC_(dc)
EndProcedure
; Авто mouse клик left button
Procedure Click_L_Mouse()
     mouse_event_(#MOUSEEVENTF_LEFTDOWN,0,0,0,0):Delay(10)  
     mouse_event_(#MOUSEEVENTF_LEFTUP,0,0,0,0):Delay(10)  
EndProcedure
 
 
Repeat
 
 If PixelSearch(665,150,695,170,RGB(86,6,12)) ; ищем красный верхний прямоугольник по данным вашего скрина
  ; Если цвет нашёл, то
  ; Кликнул мышкой 
   For i=1 To 3
       Click_L_Mouse() ; очередь из 3-х выстрелов
   Next
 EndIf  
 
  Delay(10)
ForEver
Компилируйте и пробуйте.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
24.03.2015, 11:36  [ТС]
Да не особо..можно сказать ЛОЛ...
Но Autoit не идет...
И PureBasic . мне на много интересен но пока не могу так быстро переключиться на него...
Вот и прошу помощи у Вас..
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 12:09
Цитата Сообщение от locm Посмотреть сообщение
Быстре сделать скин и пройтись по нему функциями библиотеки 2D Drawing.
По сути я проверяю прямоугольник 40х20 пикселей, а в реале можно проверить всего 1 пиксель.
Для того, что бы проверить 1 пиксель делать скрин? Не думаю, что это рационально.
Уж если и делать скрин для поиска на всём экране, тогда лучше воспользоваться GetDiBits, думаю будет быстрее, чем Пуриковские 2D Drawing.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
24.03.2015, 12:24  [ТС]
Давайте как Лучше и быстрее будет..??
можете сделать..
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2015, 13:06
Цитата Сообщение от MyStErI Посмотреть сообщение
можете сделать..
Могу, но не буду. Мне это не интересно, ни чего нового, таких кликеров пруд пруди.
Цитата Сообщение от MyStErI Посмотреть сообщение
И PureBasic . мне на много интересен
А вот раз вам интересно, то изучайте! Основу вам дали, направление тоже.
Я и так много лишнего понаписал, это уже не помощь, а "сделайте за меня" называется.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
25.03.2015, 14:14  [ТС]
Я Все ровно очень Благодарен..Pro_grammer,
Вы хороший человек.. СПАСИБО.

Добавлено через 20 часов 59 минут
locm, If color = GetPixel_(DC,i,j)
Будет медленно работать.
Быстре сделать скин и пройтись по нему функциями библиотеки 2D Drawing.

А можно пример... да все работает но медленно очень..
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.03.2015, 18:08
Цитата Сообщение от MyStErI Посмотреть сообщение
а все работает но медленно очень..
А это проверь, работает?
Там 2 варианта, один ищет по всему экрану, а второй только в маленьком регионе 40х20
Вложения
Тип файла: zip сlick.zip (23.5 Кб, 17 просмотров)
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
25.03.2015, 18:47  [ТС]
так не работает не один... не нажимает.
у меня так работает...запускаю тот скрипт который вы написали..
он ищет пиксель как находит то посылает команду через Hook.dll клик мышкой..я его к Dll привязал...
а без Hook.dll не работает ...чтоб проверить мне нужни исходники
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.03.2015, 22:02
Цитата Сообщение от MyStErI Посмотреть сообщение
я его к Dll привязал.
Он мы как оказывается умеем!
Ну вот тогда новая процедура поиска:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#img=0
 
Procedure PixelSearch(x.i,y.i,Width.i,Height.i,color.l)
CreateImage(#img,Width,Height) 
SrcDc = GetDC_(0)
DestDc = StartDrawing(ImageOutput(#img))
BitBlt_(DestDc,0,0,Width,Height,SrcDc,x,y,#SRCCOPY)   
 
 For i = x To Width-1
    For j = y To Height-1
      If color = Point(i, j)
        StopDrawing()
        ProcedureReturn 1           ; выход из процедуры при первом совпадении
      EndIf  
    Next 
 Next 
 
 StopDrawing()
 ProcedureReturn 0
EndProcedure
Остальной код тот же, что и раньше.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
25.03.2015, 22:22  [ТС]
Pro_grammer, чего то не пойму ..Не работает..
Можно полностью код как у вас он..
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
25.03.2015, 22:27
Цитата Сообщение от MyStErI Посмотреть сообщение
Можно полностью код как у вас он..
мой код тут
Поиск пиксела на экране
только заменил процедуру PixelSearch на более быструю и добавил константу #img=0
А можно код, который у вас не работает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.03.2015, 22:27
Помогаю со студенческими работами здесь

Определить цвет пиксела в заданных координатах на экране
Программа при нажатии на button1 определяет открыт ли блокнот, обращается в координаты и если RGB цвет совпадает, то в textBox1 передает...

Как сделать так, чтобы при нажатии на кнопку прямоугольник перемещался на 2 пиксела вниз а если еще раз нажать то на два пиксела вверх
Привет Всем!!! Помогите справится с задачей, такая ситуация, как в Дельфи сделать так что бы при нажатии на кнопку прямоугольник...

Поиск пикселя и поиск изображения на экране
Переписываю код из clickermann для запуска его на C++. Мне нужны две функции которые выполняли бы сканирование экрана и поиск пикселя...

Поиск слова на экране
Нужно написать программу, которая найдет на экране "запретное" слово и заменит его выбранными знаками. Есть такая программка, которая...

Поиск изображения на экране
Нужно сделать метод, который будет искать на экране определённое изображение. Ни в каком месте, ни размер изображения нам заранее не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru