Отслеживание изменения изображения на экране

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
colgol80
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.01.2023 (Сб) 15:53

Отслеживание изменения изображения на экране

Сообщение colgol80 » 15.01.2023 (Вс) 9:05

отличается по цвету в разное время суток, и изменения очень частые, к тому же частенько меняется окружение в виде персонажей. Решил пойти по пути отслеживания изменения на экране. Засёк обычный простой, пиксел на пустом поле может немного менять оттенок, поэтому придётся для каждой замеряемой точки делать небольшой фильтр смежных цветов. Так вот допустим, если в течении секунды записать значения допустим каждого 900-го пиксела экрана и сравнить с пикселами следующей секунды, можно вычленить изменённые пиксели, потом прогнать их через фильтр смежных цветов и далее уже получить точки где пикселы действительно кардинально поменяли цвет в следствии появления предмета или персонажей.

Подскажите как это сделать правильно, чтобы не было тормозов и все это делалось за секунду. Мой способ явно тормозит со страшной силой даже на одной полоске пикселей.
Код: Выделить всё
screendc = CreateDC("DISPLAY", "", "", 0&)

For i = 0 To 41
c = GetPixel(screendc, 30 + (i * 30), 30)
'Label1(i).Caption = Hex(c)
MyArray(i) = Hex(c)
Next i

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отслеживание изменения изображения на экране

Сообщение Хакер » 15.01.2023 (Вс) 13:45

colgol80 писал(а):Подскажите как это сделать правильно, чтобы не было тормозов и все это делалось за секунду.

Алгоритмам motion detection посвящены огромное количество статей, текстов, примеров.

Мой способ явно тормозит со страшной силой даже на одной полоске пикселей.

Ну, вообще-то тут не способ, а просто попытка получить цвет 42 пикселей и зачем-то сохранить текствое представление цвета каждого в массив текстовых представлений. Зачем, вообще говоря, тут сдался текст?

Я не вижу, чтобы этот в этом куске кода что-то тормозило. Отрабатывает крайне быстро.

Но в целом, это проигрышный способ: куда лучше скопировать растр экрана в двухмерный массив и обходить уже этот массив.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

colgol80
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.01.2023 (Сб) 15:53

Re: Отслеживание изменения изображения на экране

Сообщение colgol80 » 15.01.2023 (Вс) 15:38

ну у каждого же цвета свой номер, вот и сравнивать эти номера, других способов пока не знаю
у меня на приличном райзене 5, окно замирает при перетаскивании когда цикл начинает работать.
подскажите пожалуйста код для копирования растра экрана в двухмерный массив
а для создания фильтра смежных цветов требуется разложить цвет на вид xx xx xx
Код: Выделить всё
R = (C And &HFF0000) \ &H10000
G = (C And &HFF00&) \ &H100&
B = C And &HFF&

If Abs(R - tR) < D And Abs(G - tG) < D And Abs(B - tB) < D Then

The trick
Постоялец
Постоялец
 
Сообщения: 774
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Отслеживание изменения изображения на экране

Сообщение The trick » 15.01.2023 (Вс) 16:48

Я уже ответил на другом ресурсе - так делать не стоит, искать по картинке это во-первых, неэффективно, во-вторых, ненадежно. Нужно разреверсить то место где создаются эти объекты. Из своего приложения через ReadProcessMemory - считывать их координаты (уже в 3D), при необходимости преобразовывать в экранные.
UA6527P

colgol80
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.01.2023 (Сб) 15:53

Re: Отслеживание изменения изображения на экране

Сообщение colgol80 » 16.01.2023 (Пн) 8:03

они могут появиться в любом месте экрана, в совершенно случайном месте , разного размера, все зависит от положения наблюдающего и наклона его камеры. The trick?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Отслеживание изменения изображения на экране

Сообщение Mikle » 16.01.2023 (Пн) 8:30

Речь шла про место в памяти, а не на экране. В программе существует некий условный CreateBot(), если его перехватить - будешь сразу всё в точности знать об этом объекте.

colgol80
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.01.2023 (Сб) 15:53

Re: Отслеживание изменения изображения на экране

Сообщение colgol80 » 17.01.2023 (Вт) 8:05

есть программа artmoney. если с помощью неё удасться вычислить адрес, его можно применить в программе на vb6? Подскажите с чего начать, как прочитать память в игре и найти этот CreateBot()?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отслеживание изменения изображения на экране

Сообщение Хакер » 18.01.2023 (Ср) 18:15

Естественно можно. Хоть из VB6, хоть из любого другого инструмента разработки: ReadProcessMemory, WriteProcessMemory.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList