Что нового

Проблема с написанием бота

buffait

Новичок
Сообщения
2
Репутация
0
У меня такой вопрос по поводу функции PixelSearch. Пишу бота для небольшой онлайн игры, есть функция для распознавания текста в этой игре, то есть она загружает только что вырезанную картинку и работает с ней. Проблема состоит в том что функция которая подготавливает картинку с буквой для дальнейшего распознавания, не может корректно обрезать картинку с буквой "Я" с остальными все работает на ура.
Вот сама функция обрезания картинки:

Код:
Func ScreenShotcell()

$coorx = PixelSearch (424, 149, 459, 184, 0x666666)  // РАБОТАЕТ НЕПРАВИЛЬНО
    while 1
        For $index = 459 to 449 Step -1
        $coory = PixelSearch ($index, 149, 459, 184, 0x666666)
            if not @error then exitloop
        next 
            if not @error then exitloop
    WEnd

_ScreenCapture_Capture("image.jpg", $coorx[0],149, $coory[0], 184)

EndFunc


Код расположенный в цикле while предназначен чтобы обрезать картинку с права на лева, он работает тоже хорошо, а вот результат PixelSearch в переменной $coorx[0] пропускает примерно 6 пикселей с лева на право, в результате буква получается обрезанной и неполной. С самой буквой все нормально пиксели стоят на своих местах.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
369
Все из-за алгоритма Pixelsearch - он ищет слева-направо сверху-вниз(как мы читаем текст книги). У буквы "Я" слева закругление и, соответственно, пиксель находит не самый левый по всей высоте буквы, а самый первый в верхней строке.
[box title=TitleBox]
**
* *
**
* *[/box]
Вот изобразил :D функция найдет красный пиксель и выйдет, пропустив зеленый.
То есть нужно сначала искать самый крайний ЛЕВЫЙ пиксель циклом.
Вот подправил, должно быстрее работать, т.к. сканируем по одному столбику пикселей, а не по областям.
И подумай нужен ли тебе While? - он будет искать пока не найдет, а если цвета нет - цикл зависнет.
Код:
Func ScreenShotcell()
	While 1
		For $index = 424 To 459 Step 1
			$coorx = PixelSearch($index, 149, $index + 1, 184, 0x666666)
			If Not @error Then ExitLoop 2
		Next
	WEnd
	While 1
		For $index = 459 To 449 Step -1
			$coory = PixelSearch($index, 149, $index - 1, 184, 0x666666)
			If Not @error Then ExitLoop 2
		Next
	WEnd
	_ScreenCapture_Capture("image.jpg", $coorx[0], 149, $coory[0], 184)
EndFunc   ;==>ScreenShotcell

Есть тема, где текст ищется не сканированием, а по ключевым пикселям в букве - может пригодится.
http://autoit-script.ru/index.php/topic,92.0.html
 
Верх