Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Поиск изображений в перекрытом окне
Gwyn
сообщение 29.11.2024, 1:14
Сообщение #1


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



Поиск изображений в перекрытом окне не работает.

Код
--lua
local handle = findwindow("World of Warcraft")
local startX, startY, endX, endY = 108, 149, 111, 151   -- координаты поиска
local path = [["\GWYN\Image\enemy.bmp"]]                    -- путь к картинке
if handle then
    workwindow(handle[1][1])  -- Устанавливаем найденное окно как рабочее
    local arr, a = findimage (startX, startY, endX, endY, {path}, workwindow, 90, 1, 30)  -- поиск картинки
    if arr then  -- если найдена
        log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
        move (arr[1][1], arr[1][2], handle[1][1])  -- навести курсор на картинку
    else
        log ("Изображение не найдено")
    end
else
    log("Окно не найдено")
end

Картинку видит, но если её перекрыть любым приложением, то уже нет.

Пробовал

Код
local arr, a = findimage (startX, startY, endX, endY, {path}, workwindow(), 90, 1, 30)

Код
local arr, a = findimage (startX, startY, endX, endY, {path}, handle, 90, 1, 30)


Не работает, изображений не видит даже не в перекрытом окне.

Код
1:09:49 0 (autosaved_0.txt, 0): Изображение не найдено
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Madeus
сообщение 29.11.2024, 1:40
Сообщение #2


*****

Journeyman
Сообщений: 300
Регистрация: 19.11.2019
Группа: Пользователи
Наличность: 9684
Пользователь №: 19.451
Возраст: 32



Код
    
local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1], 90, 1, 30)  -- поиск картинки
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Gwyn
сообщение 29.11.2024, 2:31
Сообщение #3


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



Да, так тоже пробовал. Тоже самое что и с
workwindow()
handle

Код

local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1], 90, 1, 30)

1:09:49 0 (autosaved_0.txt, 0): Изображение не найдено


Работает только если так, но с перекрытием не дружит.
Код

local arr, a = findimage (startX, startY, endX, endY, {path}, workwindow, 90, 1, 30)

2:29:36 25 (autosaved_25.txt, 0): Изображение найдено в координатах X= 108 Y= 149
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.11.2024, 4:23
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.632
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28953
Пользователь №: 11.279



Перекрыто или свернуто?

хватит писать workwindow без скобок.

Режим полноэкранный?

getimage+saveimage что получают? результат сюда.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Gwyn
сообщение 29.11.2024, 7:35
Сообщение #5


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



Код
--lua
local handle = findwindow("World of Warcraft")
local startX, startY, endX, endY = 108, 149, 111, 151
local imagePath = [[\GWYN\Image\enemy.bmp]]

if handle then
    workwindow(handle[1][1])
    local arr, a = findimage(startX, startY, endX, endY, {imagePath}, workwindow(), 90, 1, 30)
    local address, width, height, length = getimage(100, 100, 1000, 1000, handle[1][1])

    if address then
        log("Address: " .. address)
        log("Width: " .. width)
        log("Height: " .. height)
        log("Length: " .. length)
    else
        log("Не удалось получить изображение")
    end

    local saveAddress = getimage(0, 0, 320, 256, handle[1][1])
    if saveAddress then
        saveimage(saveAddress, [[C:\Users\User\Desktop\New Pilot\picture.bmp]])
    else
        log("Не удалось сохранить изображение.")
    end

    -- Лог результата поиска
    if arr then
        log("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
    else
        log("Изображение не найдено")
    end
else
    log("Окно не найдено")
end

8:09:50 28 (autosaved_28.txt, 0): Address: 10476112
8:09:50 28 (autosaved_28.txt, 0): Width: 220
8:09:50 28 (autosaved_28.txt, 0): Height: 156
8:09:50 28 (autosaved_28.txt, 0): Length: 660
8:09:50 28 (autosaved_28.txt, 0): Изображение не найдено

getimage(0, 0, 320, 256, handle[1][1]) - в игре DX12
или
getimage(0, 0, 320, 256, workwindow())
(IMG:https://i.imgur.com/FE8XBPu.png)

getimage(0, 0, 320, 256, workwindow) - в игре DX12 (перекрытия)
(IMG:https://i.imgur.com/zKe0Udc.png)

getimage(0, 0, 320, 256, handle[1][1]) - в игре DX11 (окно не перекрывает)
(IMG:https://i.imgur.com/DhHpDRQ.png)

Очень нужно чтобы в DX12 тоже работало.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.11.2024, 10:28
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.632
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28953
Пользователь №: 11.279



Могу предложить использовать getimage из мод пака. Там есть color.lua, но под дефолту он не подгружается, над ним идет работа. Из этого color.lua можете попробовать использовать getimage. Если с ним возникнут проблемы - буду дописываеть конкретно getimage под фикс ваших проблем. Из коробки у меня идей нет. Там результатом прилетит массив. Вас интересует:
local img = getimage(...)
log(img.address) -- вот тут адрес который нужно будет передать в виде метода.

Сообщение отредактировал DarkMaster - 29.11.2024, 10:28


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Gwyn
сообщение 29.11.2024, 10:58
Сообщение #7


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



А можно для тупых поподробнее?) Я Getimage раньше не использовал, как мне картинку найти свою в кординатах, чет сложна.
Можно пример?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.11.2024, 11:39
Сообщение #8


***********

Модератор UOPilot
Сообщений: 9.632
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28953
Пользователь №: 11.279



Цитата
А можно для тупых поподробнее?)

А я помню?) Я писал это 2.5 года назад. Ну ченить типа:
Код

local clr = require"color"

local img = clr.getimage(50, 50, 100, 100, workwindow())

local result = findimage(10, 10, 20, 20, {"my_image"}, img.address, 80, 1)

Отдельно хочу предупредить по координатам. Поскольку в findimage прилетает только кусок вырезанный из 50, 50 до 100, 10 и НЕ прилетает откуда он был вырезан, то по факту поиск будет происходить в данном примере в 60, 60, 70, 70.

Так же там есть saveimage свой - можно потестить, что getimage получает. Будет ли стандартный saveimage работать с изображением из полученным из моего модуля - не знаю.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Gwyn
сообщение 29.11.2024, 11:52
Сообщение #9


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



Код
---------------------------
Message  (28: autosaved_28.txt)
---------------------------
a runtime error.

C:\Users\User\Desktop\New Pilot\lua\color.lua:35: cannot load module 'E:\backup 37.6\system\RAD\drive\J\projects\find_dll_release\find_dll_release.dll': Не найден указанный модуль.


---------------------------
ОК  
---------------------------


хз что ему нужно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.11.2024, 11:57
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.632
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28953
Пользователь №: 11.279



35 строку закомментируйте. оно вам не надо.
local array_comparator = ffi.load([[E:\backup 37.6\system\RAD\drive\J\projects\find_dll_release\find_dll_release.dll]])


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Gwyn
сообщение 29.11.2024, 12:43
Сообщение #11


**

Neophyte
Сообщений: 16
Регистрация: 10.4.2023
Группа: Пользователи
Наличность: 46
Пользователь №: 20.512



Код
--lua
local clr = require "color"

-- Ищем окно World of Warcraft
local handle = findwindow("World of Warcraft")

if handle then
    workwindow(handle[1][1])

    -- Захватываем изображение из области экрана
    local img = clr.getimage(0, 0, 320, 256, handle[1][1])

    if img and img.address then
        log("Захваченный адрес изображения: " .. tostring(img.address))
        local savePath = "C:\\Users\\User\\Desktop\\New Pilot\\picture.bmp"
        log("Путь для сохранения: " .. savePath)
        local width = img.width or 320
        local height = img.height or 256
        log("Ширина: " .. tostring(width) .. ", Высота: " .. tostring(height))
        local result = clr.saveimage(savePath, {address = img.address, width = width, height = height})

        if result then
            log("Изображение успешно сохранено в: " .. savePath)
        else
            log("Не удалось сохранить изображение.")
        end
    else
        log("Не удалось захватить изображение.")
    end
else
    log("Окно World of Warcraft не найдено.")
end

Видимо тоже не видит.
(IMG:https://i.imgur.com/Stk8hBk.png)

В DX11 вот что видит.
(IMG:https://i.imgur.com/lXLpfNn.png)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.11.2024, 13:04
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.632
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 28953
Пользователь №: 11.279



Цитата
В DX11 вот что видит.

Ой прикольно как. Это даже хорошо. Вот и баг нашел =) Я там чет с ним переделывал. Удачно вы это поймали.

Поищу, как снять можно с DX12. Если у вас есть какая-то полезная инфа - буду рад.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Писать в личку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 8.12.2024, 14:23
Designed by Nickostyle