очень много времени прошло, но надеюсь ещё остались кто поможет.
у меня только такой вариант работает. И проблема именно в том, что когда у меня чисто например 30543, то он показывает 3. если 29000, покажет 29, а на числа 23456 - всё нормально, то есть на 0, он не работает, вернее он умножает на 0 и порядок пропускается получается...
#name "Распознавание чисел"
// Author: Vint
// Version: 1.1 (30.01.2013)
// Результат возвращается в $res если не найдено $res=-1
// Только целые числа. Максимум 10 разрядов. Расположение цифр равномерное.
// Вариант скрипта с последовательным перебором разрядов
// Хотел обойтись без текстовых файлов, только переменные
//====== переменные которые задаются 1 раз если всего один шрифт ====
//если в скрипте будет искаться несколько наборов шрифтов, то задавать каждый раз при вызове
$sdvig=10 // сдвиг, чуть меньше чем ширина 1 цифры с отступом
$pref="textures\digitt_" // префикс имён файлов с цифрами
//====== переменные которые задаются при вызове поиска ====
//если место поиска всего одно, задавать только один раз
$field_x1=497 // поле под число, координата X1
$field_y1=1008 // поле под число, координата y1
$field_x2=615 // поле под число, координата X2
$field_y2=1035 // поле под число, координата y2
//====== внутренние переменные ====
$razr_max=0 // максимальная разрядность числа
$xmin=5000
$res=-1 // очищаем результат
$i=0 // очищаем результат
//================== начало ====================================================
FOR ($obhod, $obhod<10) // очищаем результат
GOSUB(sdvig_razryada)
END_CYC
GETSCREEN($field_x1,$field_y1,$field_x2,$field_y2)
COLORMODE(7)
SCREENSHOT
FOR ($i, $i<10) // ищем самую левую цифру
IF_PICTURE_IN ($field_x1,$field_y1,$field_x2,$field_y2, STRCONCAT($pref,$i,".bmp"),-1,80)
//LOGWRITE (STRCONCAT($pref,$i,".bmp"))
IF($_return1<$xmin)
$xmin=$_return1
INC($razr_max)
$res1=$i
IF($res1=10) // учитываем что 10-я картинка это 0
$res1=0
END_IF
END_IF
END_IF
END_CYC
IF($xmin=5000)
LOGWRITE ("число не найдено")
GOTO(endfindnumber)
END_IF
$field_x1=$xmin+$sdvig
$perebor=1
WHILE($perebor>0)
$razr_temp=$razr_max
FOR ($i,$i<11)
IF_PICTURE_IN ($field_x1,$field_y1,$field_x1+INT($sdvig*1.3),$field_y2, STRCONCAT($pref,$i,".bmp"),-1,90)
$field_x1=$_return1+$sdvig
IF($i<11)
INC($razr_max)
GOSUB(sdvig_razryada)
IF($res1=10) // учитываем что 10-я картинка это 0
$res1=1
END_IF
END_IF
IF($i=11) // проверка если нашли маркер конца ...11.bmp, то конец
$perebor=0
END_IF
$i=11 // выходим из цикла
END_IF
END_CYC
IF(($razr_temp=$razr_max) | ($razr_max=10)) // проверка если не нашли или уже 10 разрядов, то конец
$perebor=0
END_IF
END_CYC
// подсчитываем
$res=$res1+$res2*10+$res3*100+$res4*1000+$res5*10000+$res6*100000+$res7*1000000+$res8*10000000+$res9*100000000+$res10*1000000000
LOGWRITE ("res1: ",$res1)
LOGWRITE ("res2: ",$res2)
LOGWRITE ("res3: ",$res3)
LOGWRITE ("res4: ",$res4)
LOGWRITE ("res5: ",$res5)
LOGWRITE ("res6: ",$res6)
LOGWRITE ("res7: ",$res7)
LOGWRITE ("res8: ",$res8)
LOGWRITE ("res9: ",$res9)
LOGWRITE ("res10: ",$res10)
LOGWRITE (STRCONCAT($res1,$res2,$res3,$res4,$res5,$res6,$res7,$res8,$res9,$res10,))
endfindnumber:
LOGWRITE ("Найдено число: ",$res)
HINTPOPUP("Найдено число: ",$res)
HALT
//==============================================================================
SUB(sdvig_razryada)
$res10=$res9
$res9=$res8
$res8=$res7
$res7=$res6
$res6=$res5
$res5=$res4
$res4=$res3
$res3=$res2
$res2=$res1
$res1=$i
END_SUB
//==============================================================================