1 (изменено: ypppu, 2017-11-12 21:36:37)

Тема: AHK: Быстродействие PixelGetColor

А не подскажите сколько приблизительно уходит время на получение цвета пикселя командой PixelGetColor, в примере на один проход этого цикла:


Loop
{
	PixelGetColor, Color, PosX1, PosY1
	if Color = 0xFFFFFF
		Click, 100, 100
		Break
}

У меня вышло PixelGetColor,Color,PosX1,PosY1 (0.03), но по ощущениям времени ушло все же поболе. Ведь PixelGetColor за каждый проход цикла делает принтскрин как я понимаю, потом анализирует пиксель? Быстрее чем через PixelGetColor наверное все равно не выйдет?

2

Re: AHK: Быстродействие PixelGetColor

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

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3

Re: AHK: Быстродействие PixelGetColor

Уточнил заголовок темы.
Чтобы получить более-менее точное время, предлагаю засечь время до, затем выполнить 1000 раз PixelGetColor, после чего вновь засечь время. Прошедшее время поделить на 1000.

4 (изменено: ThrowSum, 2017-11-12 23:46:48)

Re: AHK: Быстродействие PixelGetColor

belyankin12 пишет:

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

Спасибо, смотрел вот пишет stealzy, похоже все методы основаны на принтскрине, а если он еще и в цикле, то неплохая нагрузка на процессор и все они похоже больше времени занимают:

stealzy пишет:

Тут вам помогут ф-ии, есть как минимум 3. В них взятие буфера экрана и взятие пикселя из буфера - отдельные действия.
1) использующая PrintWindow - буфер 0-100 мс в зависимости от размера окна, пиксель - 0.004 мс,
2) BitBlt - буфер  25-60 мс, пиксель - 0.01 мс,
3) Для десятков пикселей и меньше лучше подойдет GetDCEx - буфер - мгновенно, пиксель - 0.3 мс.

ypppu пишет:

Чтобы получить более-менее точное время, предлагаю засечь время до, затем выполнить 1000 раз PixelGetColor, после чего вновь засечь время. Прошедшее время поделить на 1000.

Так и сделаю.