|
Разработка findcolor, findimage, Pure lua |
|
|
|
  |
Ответов
DarkMaster |
26.3.2021, 17:31
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29621
Пользователь №: 11.279

|
Автор Cirus code
Код --lua local ffi = require("ffi") local SRCCOPY = 0x00CC0020 local DIB_RGB_COLORS = 0 local BI_RGB = 0 ffi.cdef[[ typedef long LONG; typedef unsigned short WORD; typedef unsigned long DWORD; typedef unsigned char BYTE; typedef void *LPVOID; typedef struct {DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant;} BITMAPINFOHEADER; typedef struct {BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved;} RGBQUAD; typedef struct {BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1];} BITMAPINFO; int GetDC(int hWnd); int ReleaseDC(int hWnd, int hDC); int SelectObject(int hdc, int h); int CreateCompatibleDC(int hdc); int CreateCompatibleBitmap(int hdc, int cx, int cy); bool DeleteObject(int ho); bool BitBlt(int hdc, int x, int y, int cx, int cy, int hdcSrc, int x1, int y1, unsigned long rop); int GetDIBits(int hdc, int hbm, unsigned int start, unsigned int cLines, LPVOID lpvBits, BITMAPINFO* lpbmi, unsigned int usage); ]]
function Find(x, y, x2, y2, handle) local C = ffi.C local hdcWindow = C.GetDC(handle or 0) -- если хендл не указан, то получим скрин с экрана local hdcMemDC = C.CreateCompatibleDC(hdcWindow) local hbmScreen = C.CreateCompatibleBitmap(hdcWindow, x2-x, y2-y) C.SelectObject(hdcMemDC,hbmScreen) C.BitBlt(hdcMemDC, 0, 0, x2-x, y2-y, hdcWindow, x, y, SRCCOPY) -- сохранить в памяти скрин с окна или экрана
local bi = ffi.new('BITMAPINFO', { {ffi.sizeof('BITMAPINFOHEADER'), x2-x, y2-y, 1, 32, BI_RGB,0,0,0,0,0} }) C.GetDIBits(hdcWindow, hbmScreen, 0, y2-y, nil, bi, DIB_RGB_COLORS) -- узнать какого размера нужен массив
local bits = ffi.new('unsigned char[?]', bi.bmiHeader.biSizeImage) -- выделить память под битовый массив local result = C.GetDIBits(hdcWindow, hbmScreen, 0, y2-y, bits, bi, DIB_RGB_COLORS) -- получить битовый массив -- log (result) -- если функция выполнена успешно, то вернёт высоту изображения иначе 0 -- log('Размер массива: ' .. tostring(bi.bmiHeader.biSizeImage) .. ' байт')
-- вывод в лог --------------- -- local s = '' -- local len = 0 -- local arr = {} -- for i=0, bi.bmiHeader.biSizeImage-1, 4 do -- тут поиск нужных пикселей -- local R, G, B = bits[i+2], bits[i+1], bits[i] -- s = s .. tostring(R + G * 256 + B * 65536) .. ' ' -- len = len + 1 -- if len == x2 - x then -- table.insert(arr, 1, {s}) -- s = '' -- len=0 -- end -- end -- -- for i = 1, #arr do -- log (table.concat(arr[i], ' ')) -- end -------------------
-- удаление ресурсов C.ReleaseDC(handle or 0, hdcWindow) C.DeleteObject(hdcMemDC) C.DeleteObject(hbmScreen) end
log 'clear' log 'mode compact' local t = os.clock() Find(200, 100, 210, 115, workwindow()) -- координаты области 200, 100, 210, 115, последний параметр хендл окна(можно не указывать) log('Время получения битового массива: ' .. tostring(os.clock()-t))
Сообщение отредактировал DarkMaster - 27.3.2021, 13:36
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Сообщений в этой теме
DarkMaster Разработка findcolor, findimage 24.3.2021, 18:01 sutra Я в теме. Я давно отказался от передачи массивов. ... 25.3.2021, 16:34 DarkMaster
Ловлю на слове. Пока хочу допилить, то, что есть,... 25.3.2021, 17:12 sutra Не помню сколько у меня на фул хд. Я же сказал при... 25.3.2021, 17:28 DarkMaster
Ты где тут нашел адекватного?) Ну а вообще тесты ... 25.3.2021, 17:28 sutra Да я понял, но у меня в основном нагрузка на файнд... 25.3.2021, 17:42 DarkMaster По поводу создания изображений и помощи валенкам у... 25.3.2021, 17:50 DarkMaster Из забавного. Речь пойдет о чтении из памяти данны... 26.3.2021, 0:34 sutra Ну вот, зачем спрашивается лопатить фул хд. Разбил... 26.3.2021, 16:43 DarkMaster ну вообще типа да, но типа нет. Поуму нужно делать... 26.3.2021, 16:49 sutra rmem ("unsigned char*",i)[2]
Я собствен... 26.3.2021, 17:07 sutra Понял лишь в общих чертах. Вопрос, а в файл сохран... 26.3.2021, 17:58 DarkMaster
Вот этот момент не совсем ясен. Почему 0 0? Почем... 26.3.2021, 18:00 sutra Я правильно понимаю, что мне надо добавить возврат... 26.3.2021, 18:11 DarkMaster Пока кроме скорости ничего не тестил, по идее он в... 26.3.2021, 18:15 sutra ОК. Буду ждать новостей. Cirus-у отдельное БОЛЬШОЕ... 26.3.2021, 18:16 cirus
Потому что 0 0 это координаты куда скопировать из... 27.3.2021, 1:59 DarkMaster Накидал кучу вопросов Cirus'у и надеюсь, что о... 27.3.2021, 11:41 DarkMaster Собственно то, как вот оно есть.
-- findcolor
-- Ф... 27.3.2021, 13:42 cirus
--lua
local ffi = require("ffi")
... 27.3.2021, 21:21 sutra Дарк, прочитал мануал. Что точно нужно добавить - ... 28.3.2021, 10:15 sutra Для чего нужен шаг? Например для поиска активной р... 28.3.2021, 10:41 DarkMaster Как весело провести вечер и утро.
А знаете ли вы,... 28.3.2021, 12:31 sutra Попробовал новый getimage. Работает намного быстре... 28.3.2021, 13:43 DarkMaster
А максимума нет. Размер окна может быть намного б... 28.3.2021, 13:54 sutra Насколько я понимаю, по уму надо бы возвращать адр... 28.3.2021, 13:59 DarkMaster
Я так и делаю.
Все скоро будет =) 28.3.2021, 14:03 DarkMaster Бэкапу пару дней. !@#$ notepad++ 28.3.2021, 23:12 sutra А тут как дела? Подвижки есть? 29.3.2021, 15:11 DarkMaster
Есть, откатился из-за чудес выше до момента пока ... 29.3.2021, 15:51 DarkMaster Захват изображения. Вот так вроде похоже на правду... 29.3.2021, 17:09 Cockney
Ну и идейно я делаю замену пилотовских функций с ... 29.3.2021, 20:33 DarkMaster
Планов очень много, идей очень много. Я очень не ... 29.3.2021, 21:00 Cockney
Планов очень много, идей очень много. Я очень не ... 29.3.2021, 23:47 DarkMaster Если угодно - сглазить не хочу.
Блокнот реально по... 29.3.2021, 23:55 sutra Ну вот, я явился возмутителем спокойствия и благод... 30.3.2021, 11:51 sutra Попробовал сохранить картинку. Ничего не получилос... 30.3.2021, 13:16 cirus
Это начало bmp файла BM.
Указать другую папку, в... 30.3.2021, 13:43 sutra Создаёт файл 14 байт. Доступ к нему действительно ... 30.3.2021, 15:31 sutra Последовательно пишу заголовок. Перегружаю Пилот, ... 30.3.2021, 15:44 sutra Дарк, что-то я не понял как пользоваться твоим ими... 30.3.2021, 17:38 DarkMaster Значит так. Версия из активной разработки. Дальше ... 30.3.2021, 17:38 DarkMaster --lua
local ffi=require "ffi"
local rmem=... 30.3.2021, 17:46 sutra Ни хрена себе ты наворочал. Тут месяц надо разбира... 30.3.2021, 17:47 DarkMaster ext.lg - перекочевало из другого скрипта, в рамках... 30.3.2021, 17:47 sutra Конечно моё мнение субъективно. Но вот зачем вообщ... 30.3.2021, 18:16 DarkMaster
Идейно это был изначально возврат к пилотовскому:... 30.3.2021, 18:19 sutra Может не доглядел (тогда ткни меня носом), но не н... 30.3.2021, 18:34 DarkMaster По разности каналов не делал. В достаточно большой... 30.3.2021, 18:41 sutra Да я всё понимаю. Поэтому и не берусь претендовать... 30.3.2021, 18:43 DarkMaster Если есть любые идеи, как оно должно быть - готов ... 30.3.2021, 18:43 sutra Да, кстати. Что-то у меня не получилось сохранить ... 30.3.2021, 18:45 DarkMaster --lua
local ffi=require "ffi"
local rmem=... 30.3.2021, 18:54 sutra Вот объясните мне почему так? Просто хочу понять, ... 30.3.2021, 20:15 DarkMaster
Это является флагом писать строки сверху-вниз или... 30.3.2021, 20:18 sutra Спасибо, ну примерно так и подозревал. Плохо ничег... 30.3.2021, 20:22 DarkMaster
Ну да, самое крутое не знать и писать. Думаешь я ... 30.3.2021, 20:25 sutra Соответственно 32 битовая модель не требует контро... 30.3.2021, 20:30 Madeus speed = speed + os.clock() - t
Лишняя строчка?) 30.3.2021, 20:32 sutra Эх! Понять бы ещё почему у меня проблемы с зап... 30.3.2021, 20:36 DarkMaster
бенчмарк. Ну для релиза лишняя, для работы не сов... 30.3.2021, 20:42 sutra Перегруз не помог. Нарушается у меня доступ к запи... 30.3.2021, 20:44 Madeus
бенчмарк. Ну для релиза лишняя, для работы не сов... 30.3.2021, 20:59 DarkMaster Можно удалить. Мой код тестов:
speed = 0
catch = 0... 30.3.2021, 21:08 Madeus Если не указать [deviation] вылетает с ошибкой .lu... 30.3.2021, 21:19 DarkMaster
чуть выше писал, что на данный момент только со в... 30.3.2021, 21:27 Madeus У меня одного если не указать "abs" то и... 30.3.2021, 22:51 DarkMaster
Какой метод при поиске указан?
При методе 2 будет... 31.3.2021, 0:00 Madeus
Какой метод при поиске указан?
При методе 2 будет... 31.3.2021, 0:12 DarkMaster Это сделано исключительно для совместимости со ста... 31.3.2021, 0:23 DarkMaster Sutra, я тут в итоге все-таки наткнулся на один уж... 31.3.2021, 0:45 DarkMaster
Кстати низя. Ты никак диапазоном не задашь, что r... 31.3.2021, 2:06 Madeus
Метод 2, тогда понятно, хотя надо проверить скоро... 31.3.2021, 2:06 DarkMaster
В обоих случаях зоны имели одинаковые цвета?
Мето... 31.3.2021, 2:43 cirus
Сделать скрин и искать на скрине, быстрее будет. 31.3.2021, 3:01 DarkMaster 100 прогонов во всех тестах
Фулл хд. Абс выкл.
r ... 31.3.2021, 3:06 Madeus
В целом абс существенным образом не повлияло на о... 31.3.2021, 17:20 sutra
Спасибо Дарк. Конечно так я и сам могу, но по при... 31.3.2021, 11:27 DarkMaster Я его код не тестил. Мне скрины на тот момент были... 31.3.2021, 13:03 DarkMaster Накидал скринилку. Фиксировные битовые константы з... 31.3.2021, 17:44 Madeus
Только в случае, если используется метод 2 или ме... 31.3.2021, 17:51 sutra Тест старого и нового имиджа по хендлу
зона old ... 31.3.2021, 17:59 DarkMaster Круто я когда-то лажанул. Убрал объявление getimag... 31.3.2021, 18:07 Madeus
Круто я когда-то лажанул. Убрал объявление getima... 31.3.2021, 18:14 sutra Хотя тестить в lua - гиблое дело. Можно лишь прибл... 31.3.2021, 18:12 DarkMaster getimage 100 итераций
вызов + удаление изображения... 31.3.2021, 18:44 sutra Дарк, спасибо за скринилку. Всё, на сегодня хватит... 31.3.2021, 19:05 DarkMaster
На самом деле там проблема только одна - он делае... 31.3.2021, 19:23 Madeus Нужно добавить возврат координат найденного цвета,... 31.3.2021, 22:41 DarkMaster Функция возвращает таблицу найденных цветов:
x y ц... 31.3.2021, 23:23 Madeus Проблема в том что она возвращает x y относительно... 1.4.2021, 0:11 DarkMaster Вот для этого тесты и есть =)
Поправлю. Спасибо. 1.4.2021, 0:12 Madeus Супер, спасибо за труды! :) Ждем findimage B) 1.4.2021, 0:17 DarkMaster 1)+ Переделать метод 0 для поиска по относительным... 1.4.2021, 2:12 Madeus
У меня до сих пор тяжелые думы по поводу шага пои... 1.4.2021, 2:35 DarkMaster
Хмм.. Вообще я не то залил, но этот фикс вроде но... 1.4.2021, 2:49 cirus За всё время шаг поиска использовал только 1 раз. ... 1.4.2021, 3:02 Madeus То ли лыжы не едут то ли спать пора. В общем что у... 1.4.2021, 3:04 DarkMaster
И то и другое. Спать пора - я не ту версию залил,... 1.4.2021, 3:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|