Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

чтение количества цвета по пикселям

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 21.07.2015, 16:41   #1
 Разведчик
Аватар для iMockBa
 
iMockBa никому не известный тип
Регистрация: 29.07.2011
Сообщений: 8
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для iMockBa с помощью ICQ
 
По умолчанию чтение количества цвета по пикселям

Доброго времени суток.
Ищу небольшую помощь в реализации функции определение количества ХП перса/моба в мморпг игре по пикселям...для создания бота .
Чтение из памяти процесса отсекается так как в игре стоит античит обойти который мне будет сложнее.

на данный момент уже имеется функция определения цвета пикселя по заданным координатам X,Y...
Я же ищу помощи и идей каким образом возможно реализовать чтение количества определённого цвета в области (Rectangle) большей чем Х У....
так как хотелось бы выводить количество ХП на ProgressBar моей формы .

Заранее спасибо.
________________
Are you hackers ? ......No wee are Russians!
  Ответить с цитированием
Старый 21.07.2015, 17:24   #2
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 84352
Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Пример изображения?
Если обычная ПЗ (полоса здоровья), то можно из любой точки на ПЗ начать отсчёт, в обе стороны по оси X двигаться до концов ПЗ и запомнить длину. Потом то же самое, но уже до конца рамок ПЗ. И разделить первое на второе
  Ответить с цитированием
Пользователь сказал cпасибо:
iMockBa (21.07.2015)
Старый 21.07.2015, 17:42   #3
 Разведчик
Аватар для iMockBa
 
iMockBa никому не известный тип
Регистрация: 29.07.2011
Сообщений: 8
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для iMockBa с помощью ICQ
 
По умолчанию Re: чтение количества цвета по пикселям

Да изображение это ПЗ..но не одноцвеная.

[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Are you hackers ? ......No wee are Russians!
  Ответить с цитированием
Старый 21.07.2015, 18:10   #4
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 84352
Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Ну так на одном уровне по Y цвет одинаков. Даже если не уверены, то можно сделать некоторые проверки. К примеру, вашей же функцией исследовать некоторые области и посмотреть, в какие интервалы по RGB входят цвета этой области. И дальше уже проверять цвета в промежутках
Например цвет пикселя, принадлежащего ПЗ, должен удовлетворять r1 <= r <= r2, g1 <= g <= g2 и b1 <= b <= b2, рамки ПЗ своим границам, полоса без здоровья (недостающее здоровье) своим границам

<= - меньше либо равен
  Ответить с цитированием
Старый 21.07.2015, 18:25   #5
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Античит блочит чтение памяти?
Это какое-то извращение на мой взгляд, вы уверены что открытие handle чисто для чтения (VM_READ only) не даёт результатов?
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 21.07.2015, 19:31   #6
 Разведчик
Аватар для iMockBa
 
iMockBa никому не известный тип
Регистрация: 29.07.2011
Сообщений: 8
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для iMockBa с помощью ICQ
 
По умолчанию Re: чтение количества цвета по пикселям

Цитата:
Сообщение от NickiteeПосмотреть сообщение
Античит блочит чтение памяти?
Это какое-то извращение на мой взгляд, вы уверены что открытие handle чисто для чтения (VM_READ only) не даёт результатов?

прошу заметить что в начале темы я пояснил что определение ХП по пикселям будет проще реализовать так как обойти античит мне буде сложнее ...в данной игре античит возможно и не блочит чтение НО мониторит такие действия ...что повлечёт за собой бан аккаунтов. к тому же
если было бы возможно чтение из памяти данного процесса без побочных результатов ....уж поверьте я бы не просил помощи тут в этой теме так как мне ближе чтение из памяти чем ковыряние пикселей.
________________
Are you hackers ? ......No wee are Russians!
  Ответить с цитированием
Старый 25.07.2015, 16:14   #7
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

[Ссылки могут видеть только зарегистрированные пользователи. ]
Вот кароче, x,y области отрисовки это ширина и высота клиента без border-ов, тоесть только область отрисовки.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Пользователь сказал cпасибо:
iMockBa (25.07.2015)
Старый 25.07.2015, 16:46   #8
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 84352
Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Описал же такую схему, только более универсально)
  Ответить с цитированием
Старый 25.07.2015, 23:55   #9
 Разведчик
Аватар для iMockBa
 
iMockBa никому не известный тип
Регистрация: 29.07.2011
Сообщений: 8
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для iMockBa с помощью ICQ
 
По умолчанию Re: чтение количества цвета по пикселям

примерно понял суть ...
ХП полоска ...плавающая ...тоесть координаты X1,Y1 каждый раз после перезапуска клиента меняются ...X2,Y2 в зависимости от моба также могут быть разными ...у некоторых мобов она длиннее на несколько пикселей.
На данный момент тестирую метод поиска полоски ХП и перетаскивание её в нужное место ...в заданные тоесть рабочие координаты.
По рисунку вышепреведённому получается что нужно начать сканирование каждого пикселля начиная с Х1 и У1 до конца полоски определяя все ли пиксели красного цвета ...
подскажите примерно как будет выглядеть алгоритм такого сканирования если для поиска цвета пикселя я использую стандартную функцию поиска цвета по заданным координатам
Код:
public Color GetColorAt(int x, int y)
        {
            IntPtr desk = GetDesktopWindow();
            IntPtr dc = GetWindowDC(desk);
            int a = (int)GetPixel(dc, x, y);
            ReleaseDC(desk, dc);
            return  Color.FromArgb(255, (a >> 0) & 0xff, (a >> 8) & 0xff, (a >> 16) & 0xff);
        }
________________
Are you hackers ? ......No wee are Russians!
  Ответить с цитированием
Старый 26.07.2015, 00:02   #10
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 84352
Сказал(а) спасибо: 566
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Можно таким путем
Добавьте функцию, которая будет ловить относительные координаты клика мыши в окне
В игре кликнули на любое место полосы здоровья и всё. Начинайте отсчёт в обе стороны по оси X и запоминайте первый "некрасный" пиксель слева. Это будет граница. Если там "хорошая" рамка для ПЗ, то возможно с обеих сторон будет одинаковый цвет пикселя на границе. При неполном здоровье также запоминается новый цвет справа, но если не совпадает с граничным (который нашли слева), то запомнить это место и продолжать до границы.
И уже по этим трём точкам делать выводы о здоровье
  Ответить с цитированием
Пользователь сказал cпасибо:
iMockBa (26.07.2015)
Старый 26.07.2015, 00:20   #11
 Разведчик
Аватар для iMockBa
 
iMockBa никому не известный тип
Регистрация: 29.07.2011
Сообщений: 8
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для iMockBa с помощью ICQ
 
По умолчанию Re: чтение количества цвета по пикселям

Спасибо ...попробую ...
Обязательно отпишусь . Дам знать что вышло .

Добавлено через 14 часов 43 минуты
Доброго времени суток..
обещал отписаться что выходит ...

Решил попробовать по последнему совету и прикрутил тестовую функцию
по такой схеме - клик в начало ПЗ полоски...по клику определяется цвет самой полоски ПЗ(красный) далее начинается цикл Т.Е. определение цвета каждого пикселя начиная с Х1 заканчивая Х2

Код:
int count = 1;
int f =Saved_X1;//Зарегестрированные заранее координаты начала ПЗ
while (Saved_X1 != Saved_X2)//Saved_X2 конец полоски ПЗ
                    {
                        var c_1 = GetColorAt(Saved_X1);
                        f++;                                              
                        if (c_1 == c) // c =  Цвет полоски ПЗ взятый по первому клику по ней.
                        {
                            count++;        // подсчёт красных пикселей
                        }
                        richTextBox1.AppendText(count.ToString());
                    }
Но тут появиилась небольшая загвоздка .....функия работает ...и сканирует каждый пиксель и подсчитывает количество красных....из чего можно подсчитать колличество здоровья НО
сканирование полоски которое на экране составляет 4-5 см почемуто занимает около 25-30 секунд ..........

Буду рад увидеть критику и советы ...заранее спасибо .
________________
Are you hackers ? ......No wee are Russians!

Последний раз редактировалось iMockBa; 26.07.2015 в 15:04. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 26.07.2015, 18:43   #12
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Проблема по всей видимости заключается в оптимизации, либо ты каждый пиксель проверяешь на новом bitmap-е экрана либо у тебя какая-то ну очень сложная функция получения цвета пикселя
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Старый 18.08.2015, 20:04   #13
 Пехотинец
Аватар для ВезЧубарыйЧуб
 
ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(ВезЧубарыйЧуб сломал счётчик популярности :(
Регистрация: 01.01.2012
Сообщений: 77
Популярность: 14446
Сказал(а) спасибо: 131
Поблагодарили 61 раз(а) в 41 сообщениях
 
По умолчанию Re: чтение количества цвета по пикселям

Цитата:
почемуто занимает около 25-30 секунд ..........

Цитата:
public Color GetColorAt(int x, int y) { IntPtr desk = GetDesktopWindow(); IntPtr dc = GetWindowDC(desk); int a = (int)GetPixel(dc, x, y); ReleaseDC(desk, dc); return Color.FromArgb(255, (a >> 0) & 0xff, (a >> 8) & 0xff, (a >> 16) & 0xff); }

не надо для каждого пикселя получать новый DC, но все равно большая часть проблемы, как мне кажется, заключается в GetPixel - очень медленный метод, рекомендую к прочтению:
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Расчёт количества боёв до нужного % побед ShevA~13 Общение и обсуждение по World of Tanks 8 02.02.2014 22:30
TBW 1.6c Где проверка количества игроков? FasAs Общение и обсуждение Warcraft 3 8 23.08.2012 18:40
Смещение количества сообщений Aner Общение разработчиков 6 22.08.2012 03:13
[Программа] Проверка количества онлайна Форель Общение и обсуждение 12 13.12.2011 14:18

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 16:09.

Пишите нам: [email protected]
Copyright © 2025 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net