|
|
||||||
GetPixel() работает нереально медленно на Windows 717.02.2011, 10:48. Показов 25120. Ответов 67
Метки нет (Все метки)
Написал программу (бот для онлайн игры), вся его работа заключается в получении цвета пикселя в нужных координатах и совершения тех или иных деййствий в зависимости от полученного цвета. Стояла ХР, все работало прекрасно, но вот решил попробовать семерку и столкнулся с необъяснимой вещью - бот нереально тупит. Например в самом начале он ищет окно игры в браузере (всмысле его координаты) а потом в этом окне находит нужную кнопку по ее цвету:
Добавлено через 9 минут поечему я решил что тормозит именно GetPixel()? - потому, что больше тут тормозить не чему)
1
|
||||||
| 17.02.2011, 10:48 | |
|
Ответы с готовыми решениями:
67
Несколько GetPixel с экрана - код работает слишком медленно
Медленно работает Windows 7 |
|
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
|
||
| 20.02.2011, 18:32 | ||
|
вопрос, по какой причине таким оброзом ищиш окно игры? не проще ли FindWinowEx.
0
|
||
|
|
||
| 20.02.2011, 19:26 [ТС] | ||
|
Добавлено через 56 секунд Но меня уже не столько мой бот интересует, сколько время, затраченное на GetPixel() в Windows7.
0
|
||
|
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
|
|
| 20.02.2011, 20:09 | |
|
Kastaneda, попробуй с CreateCompatibleDC, CreateCompatibleBitmap как предложил turboq, тоже вариант. может что получится.
П.С. ЛС Event`s.
1
|
|
|
|
|
| 20.02.2011, 20:55 [ТС] | |
|
Не по теме: bobrovskii, с сигналами все понятно, удобная вещь) Добавлено через 39 минут Может глупый вопрос, но все же: может GetPixel() тормозить из-за некорректного драйвера для видеокарты?
0
|
|
|
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
|
|
| 20.02.2011, 21:01 | |
|
Kastaneda, в таком случае большинство приложений используйших эту функцию имели бы такойже глюк. тут что то в твоем коде. если время будет скину в ЛС вариант с CreateCompatibleBitmap может поможет.
0
|
|
|
|
|||
| 20.02.2011, 21:06 [ТС] | |||
|
0
|
|||
|
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
|
|
| 20.02.2011, 21:13 | |
|
Kastaneda, Скорость практически таже, кода больше)
в любом случае ничего не теряеш.
0
|
|
|
4 / 4 / 5
Регистрация: 16.04.2010
Сообщений: 10
|
|
| 22.02.2011, 17:56 | |
|
Используйте GetDIBits.
0
|
|
|
|
||||||
| 24.02.2011, 12:07 [ТС] | ||||||
|
В общем написал свою ф-цию MyGetPixel(), выкладываю код, на случай если когда-нибудь кто-нибудь столкнется с похожей проблемой и воспользуется поиском по форуму:
Не по теме: Сегодня установил на семерку SP1, там стандартный GetPixel() прекрасно работает, вот же блиннн...
2
|
||||||
|
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
|
|
| 24.02.2011, 12:16 | |
|
Kastaneda, код хороший), ReleaseDC присутствует а DeleteDC забыл.
1
|
|
|
|
|
| 24.02.2011, 13:41 [ТС] | |
|
Ну я так подумал, что поскольку HDC hTmpDC локальная переменная, то нет смысла вызывать DeleteDC() для нее, все равно при выходе из MyGetPixel() она уничтожется. Или все таки нужно?
Добавлено через 7 минут Да, наверное все таки нужно, хендл удаляется, а устройство в памяти все равно наверно висит.
0
|
|
|
|
||
| 24.02.2011, 16:02 | ||
|
0
|
||
|
|
||
| 24.02.2011, 17:39 [ТС] | ||
|
Добавлено через 43 минуты
0
|
||
|
|
||
| 24.02.2011, 17:46 | ||
|
0
|
||
|
|
|||||
| 24.02.2011, 18:35 [ТС] | |||||
|
Evg, а почему ты отсюда: Я вот связи не вижу. Браузер развернут на весь экран (т.е. он не на много меньше всего рабочего стола), но при этом работать с браузером в разы (наверное в сотни, а то и в тысячи раз) быстрее, чем со столом. Вообще не понимаю почему так, тем более я только с одной точкой в своей ф-ции работаю.
0
|
|||||
|
|
|||
| 24.02.2011, 20:09 | |||
|
Если на пальцах, то ситуация примерно такая (цифры взяты от балды, чисто чтобы показать соотношение). Миллион тактов уходит на то, чтобы сделать снимок экрана, тысячу тактов уходит на то, чтобы снимок обработать. Практически тот же миллион тактов уходит на то, чтобы сделать снимок одной точки. И один такт на то, чтобы точку обработать. Т.е. при непосредственном обращении к устройству нет разницы, делать снимок всего экрана или снимок одной точки. При снимке одной точки всё равно делается снимок всего экрана, только ты этого не видишь. Когда ты работаешь с одним окном, то при повторном вызове снимок всего жкрана уже не делается, а используется закэшированный. А потому на обработку тысячи раз одной точки у тебя уходит миллион тактов плюс тысячу раз по одной точке (т.е. столько же, как если бы ты делал снимок всего экрана и обрабатывал тысячу точек). Когда работаешь с целым рабочим столом, то кэширование по каким-то причинам не делается и на обработку тысячу раз одной точки у тебя получается тысяча снимков экрана (от чего так всё и тормозит). Чем принципиально лучше вариант с получением снимка всего экрана. По скорости работы он принципиально не должен отличаться от варианта, когда за раз достаётся одна точка. Только при этом управление процессом находится в гораздо более полной мере в твоих руках, чем руках системы. Другими словами, ты перестаёшь зависеть от капризов работы GetPixel (которую, кстати говоря, не очень-то и рекомендуют к использованию): тут она работает так, там работает сяк, с таким хэндлом работает быстро, с таким медленно. Вместо кода, живучесть которого выясняется методом тыка и массового тестирования, ты получаешь код, которые независимо ни от чего и ни от кого работает везде одинаково быстро. Естественно, всё это в предположении, что догадка верна
0
|
|||
|
|
||||
| 24.02.2011, 20:40 [ТС] | ||||
0
|
||||
|
|
|
| 24.02.2011, 21:25 | |
|
Впервые за время пользования фатально накрылся Chrome. И, естественно, в тот момент, когда было написано много текста
![]() Вкратце вот что написал. Кэшируется изображение, естественным образом, только тогда, когда оно не меняется. Система "знает" о том, когда картинка поменялась, а потому в нужный момент кэш инвалидирует, делает новый снимок экрана и кэширует его. Моя идея сводилась к тому, что с небольшими интервалами (например, 50 или 100 раз в секунду), ты делаешь снимок экрана, а дальше весь анализ делаешь на снимке. В процессе анализа (я смотрю на код из первого поста) у тебя много раз вызывается GetPixel, а в новом варианте вместо этого у тебя будет просто чтение значения из буффера памяти
1
|
|
|
|
|
| 25.02.2011, 04:13 [ТС] | |
|
0
|
|
| 25.02.2011, 04:13 | |
|
Windows XP медленно работает USB работает медленно (Windows 7) Windows XP работает слишком медленно Медленно работает Аксесс 97 под Windows 7 После переустановки Windows 7 медленно работает система Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|