Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie]Imagesearch


C.J

Rekomendowane odpowiedzi

Weteran
Opublikowano

Cze

Napisał by ktoś jak dodać transparency do komendy imagesearch??

 

$result = _ImageSearch("C:\Documents and Settings\TakeThis\Pulpit\noob.BMP", 10, $x, $y, 20,0xFFFFFF)

 

Jak dodam to 0xFFFFFF jako transparency to wyszukuje wszystko ;d

Zrobilem tak jak czytałem stworzyłem napis i jako tło jest biały kolor.

Chodzi mi o to, zeby szukał tego napisu ale nie zwracał uwagi na tło.

Ogarnie ktoś ? ;]

1329036830-U154499.png
Opublikowano

a kto ci kazał tworzyć napis i dodawać do niego tło ? robisz screna tego co potrzebujesz wycinasz poszukiwany fragment , określasz którego koloru jest najwięcej w tle i jego ustawiasz jako transparent, będzie on ignorowany w czasie szukania

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Weteran
Opublikowano

Może i tak, jednak jeżeli tych kolorów jest kilka w tle ? Myślę, że nie zadziała.

A z tłem było by lepiej.Ponieważ wyciął bym napis obmalował go całego do około np. na czarno i ustawił aby nie szukał tła tylko tego napisu.

Wiem, że to trochę skomplikowane, ale myślę, że dało by się takie coś zrobić. ;]

I tak dzięki robem za odpowiedz łap plusa ;)

1329036830-U154499.png
Opublikowano

sama zasada szukania jest taka że szuka coś pasujące do oryginału , jak zrobisz po swojemu to już nie będzie to to samo co ma być szukane

 

scren robisz na jednolitym tle najlepiej, a potem wycinasz to tło ustawiając jako transparent , to na podstawie wzorca szukasz napisu i powinien być on identyczny z poszukiwanym, nie ważne na jakim tle on się będzie znajdował w grze byle był taki sam jak na wzorcu

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Weteran
Opublikowano

Coś rozumiem, ale czy mógłbyś podać jakiś przykładowy kod z objaśnienie?

Chodzi mi o zastosowanie tego.

1329036830-U154499.png
Opublikowano
#include <ImageSearch.au3>

$x = 0
$y = 0




Dim $myPics[10]
$myPics[0] = 2
$myPics[1] = '.bmp'


$res = _WaitForImagesSearch($myPics,5,1,$x,$y,100)
Switch $res
Case 0
	MsgBox(0,'','Nie znaleziono!')
Case 1
	MouseClick("LEFT", $x, $y, 2, 50)
EndSwitch

1352970251-U713459.png

By Maxiu
"Because limits, like fears, are often just an illusion"

Weteran
Opublikowano

Sprobowałem i nie działa.

Jeżeli zmienię tło to już nie zostaje znaleziony obrazek ;/

1329036830-U154499.png
Opublikowano

GetDC - otrzymanie DC okna w którym znajduje się poszukiwany obrazek

CreateCompatibleDC - stworzenie kopii DC, w którym będzie znajdowała się nasza bitmapa

CreateCompatibileBitmap - stworzenie bitmapy (kompatybilnej z pierwotnym, jak i właśnie stworzonym DC), do której będziemy kopiować fragmencik w następnym kroku

SelectObject - powiżanie bitmapy ze stworzonym DC

BitBlt - przekopiowanie odpowiedniego fragmentu okna do kompatybilnej bitmapy (którą właśnie stworzyliśmy)

GetDIBits - przekopiowanie bitmapy bit po bicie do bufferu [ taka dwuwymiarowa tablica ] - każdy element tej tablicy będzie teraz zawierał wartość od 0 do 16777215, odpowiadającą kolorowi

 

Teraz masz już tablicę z wartościami, którą przeszukujesz aby znaleźć interesujący cię wzór. Sam "wzór" możesz określić na podstawie gotowego obrazka (dla laików szukających gotowych rozwiązań, czyli w tym poście absolutnie nie o tym), lub wyszukując odpowiednie fragmenty -> najlepiej najmniejszą możliwą liczbę jednoznacznie determiniującą znalezienie (lub brak) :]

 

Teraz tak:

Być może kroki BitBlt i CreateCompatibileDC można opuścić (i powiązać nową bitmapę bezpośrednio ze starym DC -> nie jestem jednak pewien, czy wykonanie GetDIBits wtedy odbędzie się poprawnie.

 

 

Aha, byłbym zapomniał:

Rozwiązanie ze względu na konieczność odwoływania się do buferu poprzez DllStructGetData() całkowicie _nie nadaje się_ do wykonania w AutoIcie!

 

 

- - - - -

@EDIT:

No i absolutnie najważniejsze:

Działa na zminimalizowanym.

Ta sygnatura jest pusta.

Weteran
Opublikowano

@Up

Musiał by to przeczytać ze 100 razy, żeby zajażyć..chociaż czytając to już po raz ..dziesiąty dalej nie rozumiem gdzie mam użyć tych tablic?

Mam zdefiniować dla nich wartości ? Użyć w moim kodzie ? Czy wytłumaczyłeś mi na jakiej zasadzie Imagesearch działa ??

Bo nie rozumiem.. :)

Więc jakbyś był gotów wytłumaczyć to na zasadzie użycia.Nie chodzi mi tu o gotowca.

Ale nie o skomplikowaną definicje ;d Prosto, zwięźle i na temat ^^

1329036830-U154499.png
Opublikowano

_ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance,$transparency=0)
_ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance, $transparency=0)

$transparency - TRANSBLACK, TRANSWHITE or hex value (e.g. 0xffffff) of the color to be used as transparency; can be omitted if not needed

Pomogłem? Raczej nie bo przekopiowałem tylko treść include do którego nie chce się zajrzeć :/

roomy.png

Wczoraj do ciebie nie należy. Jutro niepewne... Tylko dziś jest twoje.

Opublikowano

To jest sposób na zrobienie tego taki, jaki wykorzystuje imagesearch.dll (jednak pobiera DC dla całego ekranu, toteż niemożliwe jest wyszukiwanie na zminimalizowanym)

 

Wyliczyłem ci funkcje GDIPlus -> więcej możesz o nich znaleźć na MSDN'ie.

 

Możesz je użyć w AutoIcie za pomocą autoitowej funkcji DllCall, jednak mija się to z celem, gdyż - aby stworzyć bufor otrzymujący tablicę wartości kolorów - musiałbyś użyć DllStructCreate(), i nastepnie odwoływać się do niego za pomocą DllStructGetData -> to są bardzo ułomne funkcje AutoIt'a, których wydajność jest zerowa (w szczególności otrzymywanie danych z bufora).

 

Należy to zrobić w jakimś prawdziwym języku, jak np. C++. Tam stworzenie bufora i pobranie do niego wartości bitmapy (co jest istotą tego rozwiązania, funkcja GetDIBits robi całą magię, wcześniej tylko przygotowujemy bitmapę) jest tak proste jak zadeklarwanie tablicy.

Ta sygnatura jest pusta.

Weteran
Opublikowano

" Pomogłem? Raczej nie bo przekopiowałem tylko treść include do którego nie chce się zajrzeć :/ "

Zajrzałem..;]

 

Dobsz temat zamknięty jednym słowem Autoit to syf ;f

1329036830-U154499.png
Opublikowano

" Pomogłem? Raczej nie bo przekopiowałem tylko treść include do którego nie chce się zajrzeć :/ "

Zajrzałem..;]

 

Dobsz temat zamknięty jednym słowem Autoit to syf ;f

...Chyba autor -,-

za duża sygnatura

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...