|
|
||||||
GetPixel() работает нереально медленно на Windows 717.02.2011, 10:48. Показов 25067. Ответов 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 медленно работает система Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|