Подсчет количества по цвету пиксей в прямоугольной области как ?

Опубликуйте ваши работающие скрипты, библиотеки и ПО для AutoHotkey
gqqqd
Posts: 9
Joined: 19 Mar 2022, 03:59

Подсчет количества по цвету пиксей в прямоугольной области как ?

19 Mar 2022, 04:31

Подсчет количества по цвету пиксей в прямоугольной области как ?
помогите примером пожалуйста
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Подсчет количества по цвету пиксей в прямоугольной области как ?

19 Mar 2022, 14:39

Подсчёт количества чего?
Пикселей определённого цвета?
Разных цветов?

Code: Select all

	SetBatchLines, -1
	MouseGetPos, areaX, areaY
	areaW := 100
	areaH := 60

	redPixels := 0
	colorGroups := [], colorGroups.SetCapacity(32768)

	Loop %areaH% {
		pxY := A_Index
		Loop %areaW% {
			pxX := A_Index
			PixelGetColor, pxColor, % areaX + pxX, % areaY + pxY
			colorGroups[pxColor] := 1
			If (pxColor == 0x0000FF)
				redPixels++
		}
	}

	colorGroupsNum := 0
	For color In colorGroups
		colorGroupsNum++

	MsgBox, Красных пикселей: %redPixels%`nВсего цветов: %colorGroupsNum%
Вопрос учитель Йода как задаёте вы почему?
github://oGDIp - GDI+ wrapper for AHK v1.1
gqqqd
Posts: 9
Joined: 19 Mar 2022, 03:59

Re: Подсчет количества по цвету пиксей в прямоугольной области как ?

20 Mar 2022, 02:32

Подсчет количества пикселей определённого цвета в определенной области экрана
спасибо большое
gqqqd
Posts: 9
Joined: 19 Mar 2022, 03:59

Re: Подсчет количества по цвету пиксей в прямоугольной области как ?

20 Mar 2022, 04:42

mcl wrote:
19 Mar 2022, 14:39
Подсчёт количества чего?
Пикселей определённого цвета?
Разных цветов?
Пожалуйста не могли бы откоментировать код я новичек хотел бы разобраться и модифицировать очень интересна эта тема ну и считает он что то долго наверно потому что все цвета считает а мне нужно только определеный может будет считать быстрей
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Подсчет количества по цвету пиксей в прямоугольной области как ?

20 Mar 2022, 13:24

Code: Select all

	SetBatchLines, -1          ; Ставим отсутствие задержки между командами (для скорости)
	MouseGetPos, areaX, areaY  ; Получаем координаты курсора мыши - от него и будем отсчитывать область
	areaW := 100               ; Ширина искомой области (в пикселях)
	areaH := 60                ; Высота искомой области
	
	redPixels := 0             ; Переменная для подсчёта красных пикселей
	
	; Первый цикл, повторяется areaH раз
	Loop %areaH% {
		; Специальная переменная A_Index увеличивается на 1 на каждом витке цикла.
		; Сохраняем её в переменной, отвечающей за вертикальную координату
		pxY := A_Index
		
		; Второй цикл, areaW раз, для горизонтальной координаты
		Loop %areaW% {
			; В каждом цикле у переменной A_Index своё значение.
			; Внутри этого, второго цикла оно будет от 1 до areaW.
			pxX := A_Index
			
			; Получаем цвет пикселя возле курсора мыши (см. выше areaX, areaY),
			; а именно на pxX пикселей правее и на pxY ниже курсора.
			PixelGetColor, pxColor, % areaX + pxX, % areaY + pxY
			; Полученный цвет будет в формате BGR, т.е. красный и синий каналы
			; поменяны местами.
			
			; Если пиксель полностью красный, увеличиваем переменную redPixels на 1.
			; 0x0000FF - шестнадцатеричное представление красного цвета:
			; 0 синего, 0 зелёного и 255 красного.
			; См.: https://ru.wikipedia.org/wiki/HTML-цвета
			If (pxColor == 0x0000FF)
				redPixels++
		}
	}
	
	MsgBox, Красных пикселей: %redPixels%
Заметил одну особенность: в моём Firefox скрипт отрабатывает почти в семь раз медленнее.
В любом случае, постоянно дёргать PixelGetColor — не самый лучший способ. Быстрее было бы делать скриншот и читать цвета напрямую из памяти, но раз вы новичок, не могу рекомендовать этот способ.
github://oGDIp - GDI+ wrapper for AHK v1.1

Return to “Скрипты и библиотеки”

Who is online

Users browsing this forum: No registered users and 60 guests