|
|
||||||
GetPixel() работает нереально медленно на Windows 717.02.2011, 10:48. Показов 24582. Ответов 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 | |
|
Помогаю со студенческими работами здесь
40
Windows XP медленно работает USB работает медленно (Windows 7) Windows XP работает слишком медленно Медленно работает Аксесс 97 под Windows 7 После переустановки Windows 7 медленно работает система Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|