|
|
  |
Новая Версия Uopilot v.2.40 (05.11.2017), Официальный сайт. Скачать. Последняя версия. |
|
|
DarkMaster |
7.11.2018, 1:44
|
          
Модератор UOPilot
Сообщений: 9.742
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29647
Пользователь №: 11.279

|
Вообще самым быстрым вариантом будет работа с указателями и прямое чтение памяти. Но в lua этого нет. Более того в луа нет таких типов данных, как byte и int. Тут все на double. Это однозначно приведет к проблеме скорости, т.к. все byte должны будут приведены к типу double. Объем изображения приличный и эти преобразования уже начинают давать свои проблемы. Вообще для подобного анализа луа не лучший вариант, хотя однозначно можно. Если это именно в плане подготовки изображений, т.е. какой-то предварительный анализ для последующего использования статистики, кусков изображений и т.д., то этой скорости будет достаточно, если речь идет о реал тайм обработке, то могут возникнуть вопросы (очень сильно зависит от размера изображения).
Отдельная просьба к кнайту, т.к. это минимум второй человек, который озадачился данным аспектом - сделать пуш битовой маски в массив луа. Что-то вроде: local arr = BitmaskToArray(pointer) ArrayToBitmask(arr, pointer) Всяко лучше, чем имиджи насиловать, трудозатраты, по идее там сиволические на это дело.
Сообщение отредактировал DarkMaster - 7.11.2018, 1:52
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
cirus |
7.11.2018, 14:54
|

         
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26759
Пользователь №: 16.971
Возраст: 29

|
Цитата в каком формате хранятся данные В таком: bgrbgrbgr Где b-синий канал, g-зелёный, r- красный. Плюс выравнивание строки, должна быть кратна 4. Код --lua log "clear" log "mode compact" local address, w, h, len=getimage(0, 0, 5, 5) local arr, k = {}, 1
for i=0, h-1 do arr[k]={} for j=0, len - (len - w * 3 + 1), 3 do local b=readmem(address + len * i + j, "b", windowhandle()) local g=readmem(address + len * i + j + 1, "b", windowhandle()) local r=readmem(address + len * i + j + 2, "b", windowhandle()) -- log (r, g, b) table.insert(arr[k], r + g * 256 + b * 65536) end k=k+1 end
for i=1, #arr do log(table.concat(arr[i], " ")) -- вывод массива в лог end
|
|
|
|
sutra |
7.11.2018, 15:16
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата В таком Вроде всё так и делаю, ладно сейчас врублюсь. Спасибо. Просто я сильно усложнил, ещё раз спасибо. Решил свой файнд соорудить. Цитата windowhandle Вот и вся причина, как обычно незнание прописных истин. Плохо конечно методом тыка без примеров чего-то делать, но нет худа без добра все форматы "по косточкам перебрал". Чего забыл - вспомнил, да и нового немало почерпнул.
|
|
|
|
sutra |
8.11.2018, 20:29
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата За пределы изображения только не выйдете Обижаешь Дарк. У меня большие проблемы с языком, но с алгоритмами пока я в ясной памяти. Пока сделал по строкам, но думаю и по вертикали додумаю. Определяю количество чтений для каждой строки и количество байт при последнем считывании. numreed=math.ceil((x2-x1+1)*3/255) ostatok=math.fmod((x2-x1+1)*3,255) Цитата tmp=readmem(index+1,"w",handle) -- обновить в теле Спасибо, как я и говорю - проблемы ...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|