Seite 2 von 2

Verfasst: 17.05.2009 08:57
von WPö
Mogggggääänn!

Ja, KeyKon hat schon recht (he, Mann, wann schläfste eigentlich?). Die Position des Textes muß bekannt sein - oder Du mußt ausprobieren.

Wenn das nicht geht, bleibt wirklich nur noch eine Kreuzkorrelation übrig. Da ist es egal, wo der Text steht - nur gekippt/gedreht/gespiegelt oder so darf er nicht sein. Er muß immer in der gleichen Größe vorliegen, aber die Position ist egal - die wird mittels der Kreuzkorrelation errechnet.

Mach dich hierzu in der Wikipedia mal schlau.
Edit 1: http://de.wikipedia.org/wiki/Korrelatio ... rarbeitung

Edit 2: Test auf ganzen Schriftzug als Bildchen. Bei >50% Übereinstimmung haben wir Erfolg:

Code: Alles auswählen

Testtext.s = "Test"
CreateImage(1, 1,1, 1)  ;Tiefe=1 für s/w - reicht ja aus
StartDrawing(ImageOutput(1))
b = TextWidth(Testtext)
h = TextHeight(Testtext)
StopDrawing()           ;ResizeImage() verändert den Bildzeiger, deshalb diesen gleich neu bestimmen
ResizeImage(1, b,h, #PB_Image_Raw)
StartDrawing(ImageOutput(1))
DrawText(0,h, Testtext, $ffffff,$000000)  ;ectl. noch die Basishöhe der Schrift anpassen!

gefunden.l = 0
For y=0 To h-1
  For x=0 To b-1
    If Point(x,y)   ;Schriftfarbe
      ;Diese folgende Zeile anpassen - weiß noch nicht, wie das Bildschirmauslesen am günstigsten gemacht wird.
      If PeekB(*Bildspeicher + y*Bildschirmbreite + x) = #weiß : gefunden + 1 : EndIf
    Else
      ;nix machen, weil Sollhintergrund = weiß
    EndIf
  Next x
Next y

StopDrawing()

If gefunden >= b*h/2
  MessageRequester("Hurra!", "Schriftzug erkannt!")
EndIf
End
Grüße - WPo

Verfasst: 17.05.2009 12:45
von LifeSux
Vielen Dank für die schnelle Antwort und Hilfe!
Ich teste das sehr gerne nachher mal, muss aber zuerst nochmal kurz Wiki befragen ;).
Die Position ändern sich leider :>, da mein Char sich bewegt :P


//EDIT
Ich habe eine Lösung für meine bewegliche Position gefunden. Wenn man das Fenster auf eine bestimmte Breite bringt, bewegt sich zwar die Person und der Hintergrund, der ChatText bleibt aber immer an der gleichen Position (in Relation zum Fenster des Spiels).
Jetzt habe ich die Schriftgröße sehr groß eingestellt und müsste doch nur einen weißen Punkt finden, welcher bei anderen Eingaben nicht dort steht oder?...

Verfasst: 17.05.2009 13:44
von KeyKon
Du solltest einfach meherere Weise Punkte suchen...

Verfasst: 17.05.2009 16:17
von LifeSux
Test.l = Point(30,30)
Debug Test.l

Bevor ich das machen kann, muss ich ja noch das StartDrawing festlegen... wie erhalte ich denn von dem kleinen Fenster (dem Spiel) nen Image? O.o

Verfasst: 17.05.2009 16:24
von Kaeru Gaman
:lol: ja, das ist der eigentliche Knackpunkt...

witzig, dass fast zwei Tage rumdiskutiert wird, ohne dass einem das Problem auffällt.

ich wollte ganz am Anfang mal schreiben, warum du nicht versuchst auf den Chatbuffer zuzugreifen,
das wäre auch nicht viel umständlicher als auf den Screen eines fremden Games zuzugreifen.
... aber mir kam dann was dazwischen und wär eh gefrotzelt gewesen...


also, es gibt etliche topics, die sich damit befassen, und es ist immer sehr umständlich.

in deinem konkreten fall, da es sich um ein kleines Fenster handelt,
würde ich anregen einen ScreenShot von diesem einzelnen Fenster
zu machen und den zu bearbeiten.

es gibt eine API-Funktion die dir zu nem Fensterhandle nen Shot zurückliefert, wurde schon mal diskutiert,
und das Handle des Fensters kannst du dir über seinen Namen liefern lassen.

wie genau das geht weiß ich nicht, ist nicht mein Fachgebiet.

Verfasst: 21.05.2009 23:01
von WPö
So. Habe mir gerade die WinAPI-Lib von Ray gezogen. Da stolperte ich gleich über "Screenshot erstellen". Das dürfte auch der nächste Lösungsansatz für dieses Problemchen sein. Siehe http://www.purebasic.fr/german/viewtopi ... &start=100

Grüße - WPo