|
Помогите освоить LUA |
|
|
|
  |
Ответов
sutra |
12.11.2018, 23:31
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Код function FindRGB(addr,len,scrX1,scrY1,fx1,fy1,fx2,fy2,usl,numf,h) -- addr,len : адрес в памяти и длина строки в памяти (то, что даёт getimage) -- scrX1,scrY1 : координаты скрина, аналогичны координатам getimage (конечные X и Y не требуются) -- fx1,fy1,fx2,fy2 : координаты поиска, абсолютные относительно рабочего окна (мне так удобнее). Должны быть внутри диапазона скрина. -- usl : условие поиска "R(10-255) G(70-100) B(50) R-G[50 200] R-B[-40 -20] G-B[15]" -- условие ОДНО, по принципу ужесточения параметров поиска. R-G - разность между каналами с возможностью интервала -- G-B[15] идентично G-B[15 255] -- никакой проверки лексики естественно нет -- numf : количество искомых пикселей -- h : хендл пилота local _,_,r1,r2 = usl:find("R%((%d+)%-*(%d*)") local _,_,g1,g2 = usl:find("G%((%d+)%-*(%d*)") local _,_,b1,b2 = usl:find("B%((%d+)%-*(%d*)") local _,_,RG1,RG2 = usl:find("R%-G%[(%-*%d+)%s*(%-*%d*)") local _,_,RB1,RB2 = usl:find("R%-B%[(%-*%d+)%s*(%-*%d*)") local _,_,GB1,GB2 = usl:find("G%-B%[(%-*%d+)%s*(%-*%d*)") r1=tonumber(r1) r2=tonumber(r2) g1=tonumber(g1) g2=tonumber(g2) b1=tonumber(b1) b2=tonumber(b2) RG1=tonumber(RG1) RG2=tonumber(RG2) RB1=tonumber(RB1) RB2=tonumber(RB2) GB1=tonumber(GB1) GB2=tonumber(GB2) if r1==nil then r1,r2=0,255 else if r2==nil then r2=r1 end end if g1==nil then g1,g2=0,255 else if g2==nil then g2=g1 end end if b1==nil then b1,b2=0,255 else if b2==nil then b2=b1 end end if RG1==nil then RG1,RG2=-255,255 else if RG2==nil then RG2=255 end end if RB1==nil then RB1,RB2=-255,255 else if RB2==nil then RB2=255 end end if GB1==nil then GB1,GB2=-255,255 else if GB2==nil then GB2=255 end end local r,g,b=0,0,0 local arr,ss,k,numbyte,pos={},"",0,255,(fx1-scrX1)*3 -- pos - количество первых байтов в строке памяти не требующих анализа if len<253 then local rgb=1 local ind=addr+(fy1-scrY1)*len+pos -- начальный индекс в памяти для считывания данных local maxind=addr+(fy2-scrY1)*len+(fx2-scrX1+1)*3-1 -- конечный индекс в памяти для считывания данных local x,y,j=fx1,fy1,1 while ind<=maxind do numbyte=math.min(255,maxind-ind+1) -- количество байт для очередной итерации считывания из памяти ss=readmem(ind,"s",numbyte,h) ind,j=ind+numbyte,1 while j<=numbyte do if x>=fx1 and x<=fx2 then if rgb==1 then b=string.byte(ss,j) end if rgb==2 then g=string.byte(ss,j) end if rgb==3 then r=string.byte(ss,j) if r>=r1 and r<=r2 and g>=g1 and g<=g2 and b>=b1 and b<=b2 and r-g>=RG1 and r-g<=RG2 and r-b>=RB1 and r-b<=RB2 and g-b>=GB1 and g-b<=GB2 then k=k+1 arr[k]={} arr[k][1]=x arr[k][2]=y arr[k][3]=r arr[k][4]=g arr[k][5]=b if numf<=k then return arr end end end end j,pos=j+1,pos+1 if rgb<3 then rgb=rgb+1 else rgb,x=1,x+1 end if pos==len then pos,y,rgb,x=0,y+1,1,scrX1 end end end else local numreed=math.ceil((fx2-fx1+1)*3/255) local ost=math.fmod((fx2-fx1+1)*3,255) for i=fy1,fy2 do local ind=addr+(i-scrY1)*len+pos local x=fx1 for s=1,numreed do if s==numreed then numbyte=ost else numbyte=255 end ss=readmem(ind,"s",numbyte,h) for j=1,numbyte,3 do b=string.byte(ss,j) g=string.byte(ss,j+1) r=string.byte(ss,j+2) if r>=r1 and r<=r2 and g>=g1 and g<=g2 and b>=b1 and b<=b2 and r-g>=RG1 and r-g<=RG2 and r-b>=RB1 and r-b<=RB2 and g-b>=GB1 and g-b<=GB2 then k=k+1 arr[k]={} arr[k][1]=x arr[k][2]=i arr[k][3]=r arr[k][4]=g arr[k][5]=b if numf<=k then return arr end end x=x+1 end ind=ind+numbyte end end end return arr end
log "clear" log "mode compact" local x1,y1,x2,y2=49,100,551,941 local address, w, h, len = getimage (x1, y1, x2, y2) local handle = windowhandle() local bmp={} bmp=FindRGB (address, len, x1, y1, 49,700,51,901,"R(0-255)",20000,handle) deleteimage(address) for i=1, #bmp do log(table.concat(bmp[i], " ")) -- вывод массива в лог end Наваял тут, может ткнут носом что совсем не так делаю. И вопрос, а как сделать, чтобы сохраняя формат в отдельном окошке код помещать? Сообщение отредактировал sutra - 14.11.2018, 13:56
|
|
|
|
Сообщений в этой теме
sutra Помогите освоить LUA 24.10.2018, 18:09 cirus --lua
log "clear" log "mode compact... 25.10.2018, 1:58 DarkMaster Поскольку lua весь на деревьях и размеры массивов ... 25.10.2018, 8:43 DarkMaster Предчувствуя следующий вопрос:
local function lg... 25.10.2018, 8:54 sutra Спасибо большое парни! Оба здорово помогли мне... 25.10.2018, 23:06 DarkMaster
Смысл в том, что это делать уже не надо - оно уже... 26.10.2018, 0:36 sutra Дарк, а есть такая возможность получить некий резу... 26.10.2018, 12:28 DarkMaster
Нет. И подозреваю, что даже между запущенными на ... 26.10.2018, 14:25 WKnight
Теоретически есть. А смысл? 26.10.2018, 14:35 sutra Смысла нет, просто скрипт огромный, хотел частями ... 26.10.2018, 15:53 sutra В башке "месиво" сплошное от всех этих я... 26.10.2018, 16:49 olduo.com
В башке "месиво" сплошное от всех этих ... 27.10.2018, 0:51 DarkMaster
И да и нет. Пока не лезешь в классы и метатаблицы... 27.10.2018, 1:59 Cockney
Да вот только сам по себе луа пустой. Его сфера ... 27.10.2018, 12:44 DarkMaster
Классы этого никак не меняют.
И справляется на с... 27.10.2018, 14:00 Cockney
Классы этого никак не меняют.
И справляется на с... 27.10.2018, 14:48  olduo.com
Ради интереса зашел на одну из вакансий по луа:
... 27.10.2018, 18:17 sutra Во какую тему замутил. А я вот со своим дилетантск... 27.10.2018, 16:09 DarkMaster
Насколько я понял там вообще пофигу ибо линкуется... 27.10.2018, 17:08 Cockney
Начали мы как раз с того, что луа живет за счет ... 10.11.2018, 0:05 sutra Я попробовал и даже простейшую функцию не смог сде... 27.10.2018, 18:24 cirus
Выкладывайте код, поправим.
Для примера:
--lua
--... 27.10.2018, 18:31 sutra Не смог реализовать goto как только не пробовал, д... 27.10.2018, 19:53 cirus
Лучше сразу забудьте про него.
--lua
function pro... 27.10.2018, 19:53 sutra Спасибо. То есть goto не работает?? 27.10.2018, 20:01 cirus
Нет. Он и не нужен.
В луа его вообще нет. Вроде к... 27.10.2018, 20:04 sutra Меня конечно учили в своё время, что goto использо... 27.10.2018, 20:16 DarkMaster
Как правило подобные проблемы говорят о том, что ... 28.10.2018, 2:11 sutra А оператор continue в цикле while есть? 29.10.2018, 0:00 cirus В луа нет continue. 29.10.2018, 0:18 sutra Это очень нехорошо. Если честно, то я не понимаю. ... 29.10.2018, 1:28 DarkMaster while var > 1 do
local result = check_some_pa... 29.10.2018, 4:29 sutra Спасибо Дарк. Но у меня так не получится. Допустим... 29.10.2018, 12:55 sutra Слишком сложный код. никакого линейного выполнения... 29.10.2018, 13:15 sutra Грубо говоря есть определённое количество событий,... 29.10.2018, 13:25 sutra local n = "123.txt"
local f = io.open(... 29.10.2018, 14:41 DarkMaster
А лежит он где? Рядом с ехе пилота? Пилот перезап... 29.10.2018, 14:44 sutra Обычным текстом открывает [[123.txt]]
Минутку, те... 29.10.2018, 15:04 cirus
Скорее всего были какие-то ошибки.
--lua
local n ... 29.10.2018, 15:09 sutra Перегрузил Пилот через прибивалку, всё заработало,... 29.10.2018, 15:17 sutra Понял причину, забыл поставить двойной слеш при ук... 29.10.2018, 15:40 DarkMaster
Не редактируйте код перед тем, как выложить. Ну л... 29.10.2018, 18:00 sutra Я не редактировал. Просто сначала использовал полн... 29.10.2018, 18:21 DarkMaster
это фиксанули буквально пару дней назад 30.10.2018, 5:31 sutra Добрался до файндов. и как и думал ничего у меня н... 31.10.2018, 13:03 sutra И конечно примеры на lua "надёжно" зарыт... 31.10.2018, 13:14 cirus
--lua
local a, c = findimage(0, 0, 1920, 1080... 31.10.2018, 13:29 sutra Спасибо.
Так я и говорю надёжно спрятано. Я случа... 31.10.2018, 13:35 cirus
Когда выйдет полноценная версия пилота на луа, то... 31.10.2018, 13:50 sutra --lua
log "clear" log "mode compact... 31.10.2018, 14:01 cirus Да, в findimage есть баг, если искать на скрине от... 31.10.2018, 14:10 sutra --lua
log "clear" log "mode compact... 31.10.2018, 14:17 cirus --lua
log "clear" log "mode compact... 31.10.2018, 14:23 sutra Спасибо разобрался. Ну в общем тот баг и в lua про... 31.10.2018, 14:43 cirus
--lua
log "clear" log "mode compact... 31.10.2018, 14:57 sutra Спасибо. 31.10.2018, 15:12 DarkMaster
Суть в том, что само тело пилотовских функций оди... 31.10.2018, 19:04 sutra
А получить массив найденных пикселей, где хранятс... 1.11.2018, 12:54 cirus --lua
local a = findcolor("0, 0, 1920, 108... 1.11.2018, 13:09 sutra Спасибо.
А какой самый простой способ в lua убить... 1.11.2018, 13:26 DarkMaster
arr = nil
вы не убили массив. Вы создали новый п... 1.11.2018, 13:44 WKnight Плин, вот так скажешь ваське ченить полезное, и по... 1.11.2018, 13:51 sutra Спасибо. Вывод... лучше спросить, коли с мозгами т... 1.11.2018, 14:20 sutra Всем огромное спасибо, кто потратил своё время на ... 4.11.2018, 18:46 sutra --lua
check=5
checkint=0
for i=1, 10 do
for j=... 8.11.2018, 12:01 cirus
Нет. 8.11.2018, 12:36 DarkMaster Не забывайте области видимости - пишите local при ... 8.11.2018, 17:34 sutra
Спасибо, я не забываю. На примерах просто лень, у... 9.11.2018, 1:59 WKnight А напомните, что именно имеется ввиду. Я как раз р... 9.11.2018, 2:07 sutra Так Cirus показывал на примере моей картинки в тем... 9.11.2018, 2:12 cirus
https://forum.uokit.com/index.php?s=&sh...st... 9.11.2018, 2:19 DarkMaster
1) Глобальные переменные медленные.
2) В луа огра... 9.11.2018, 10:07 WKnight А, я думал может еще чего интересного нашли :) 9.11.2018, 12:48 DarkMaster Я тебе могу предложить убрать костыль по координат... 9.11.2018, 13:02 sutra
Кнайт, мне нравится подход, ЕЩЁ ... Я считаю, что... 9.11.2018, 16:59 WKnight Чет не помню такого. 9.11.2018, 18:28 DarkMaster В приват ща опишу. А то "секретные технологии... 9.11.2018, 18:36 sutra Блин, секретные технологии. Ну у меня тоже есть та... 10.11.2018, 1:16 sutra Фишка в том, что анализируются не изображения, а ф... 10.11.2018, 1:39 sutra Думаю всё это легко можно сделать в lua , но мне п... 10.11.2018, 2:13 cirus
--lua
log "clear" log "mode compact... 10.11.2018, 2:29 DarkMaster В данном случае я бы рекомендовал для начала забыт... 10.11.2018, 13:07 sutra
Ну этот метод я знаю, в принципе неплохой вариант... 10.11.2018, 14:51 sutra
Сорри, не доглядел, действительно, я не знал синт... 10.11.2018, 15:08 DarkMaster Очень неплохо поднимается производительность, если... 10.11.2018, 15:29 sutra Так в том то и фишка, что колор в памяти только-то... 10.11.2018, 15:44 cirus --lua
-- сделать привязку Ctrl+A
local h = workwin... 10.11.2018, 16:25 sutra
Спасибо большое. Век живи и век учись. Я просто п... 10.11.2018, 16:52 cirus
Color, findimage, findcolor, getimage, move, left... 10.11.2018, 17:07 sutra ОК. 10.11.2018, 17:30 sutra Теперь про борьбу с рендерингом. Может кому пригод... 12.11.2018, 16:22 sutra Конечно если картинки очень сложные, то спасёт тол... 12.11.2018, 18:38 sutra Круто, я так не умею, не знаю как. 13.11.2018, 0:00 sutra Эх, если бы за один присест получить доступ к памя... 13.11.2018, 0:16 DarkMaster
Может быть рассчитан на основе кооридант. Т.е. ег... 13.11.2018, 0:21 sutra Спасибо Дарк. Я не знал про переменные. В Паскале ... 13.11.2018, 0:39 DarkMaster
Это регэкспы. Можно почтиать в regex, но в луа он... 13.11.2018, 0:46 sutra Спасибо на добром слове Дарк. Примерно я понимаю. ... 13.11.2018, 1:01 sutra
А вот это не факт. Каркать не стану, но сдаётся м... 13.11.2018, 1:32
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|