AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Kleine Bitmap in einer größeren Bitmap finden
Thema durchsuchen
Ansicht
Themen-Optionen

Kleine Bitmap in einer größeren Bitmap finden

Ein Thema von rhodan · begonnen am 16. Jul 2014 · letzter Beitrag vom 17. Jul 2014
Antwort Antwort
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#1

Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 02:03
hi!

Ich möchte ein Poker-Tool schreiben wie den "Holdem Indicator", bedeutet ein tool das mir beim pokerspielen anzeigt wieviel gewinnchance meine aktuelle hand hat, vielleicht verglichen mit den noch im spiel befindlichen karten etc. Also quasi die Anzeige die auch beim DSF Poker immer angezeigt wird und mir eine übersicht gibt wie gut meine chancen stehen.

für mich stellt sich jetzt die frage wie ich das programm mein eigenes Blatt auslesen lasse.
Ich weiß wie ich einen screenshot von meinem bildschirm mache und bestimmte pixel nach farben absuche und so mein eigenes blatt identifiziere...allerdings finde ich das recht aufwendig, fehlerlastig, vor allem wenn auch noch der flop, turn, river etc ausgelesen werden sollen...ein riesen haufen koordinaten.

einfache variante wäre wenn ich ein screenshot von jeder karte schon im programm hätte und dieses mit dem screenshot meines bildschirms verglichen werden würde..ich finde nur zu dem thema nichts..ich habe den sourcecode in c++ gefunden was ich leider nicht beherrsche. ;D

Code:
procedure TForm1.Button2Click(Sender: TObject);
var
game_hwnd : hwnd;
prect:Trect;
posx,posy:integer;
dc:hdc;
AColor : Array[1..4] of Byte;

begin

game_hwnd := findwindow(nil,'POKER - mozilla firefox');
setforegroundwindow(game_hwnd);
setfocus;
postmessage(game_hwnd,WM_SYSCOMMAND,SC_MAXIMIZE,0);
GetWindowRect(game_hwnd, prect);
prect.Top := prect.Top + GetSystemMetrics(SM_CYCAPTION);
width:=prect.Right - prect.left;
height:=prect.Bottom - prect.Top;
posx:=prect.left;
posy:=prect.top;

   DC := GetDC(game_hwnd);

 
  DWord(AColor) := GetPixel(dc,406,409);
 //HERZ KÖNIG
  if (AColor[1] > 220) and (AColor[2] > 95) and (AColor[3] > 190) then
    ....
das ist jetzt nur ein beispiel wie ich die farben auf dem screenshot auslesen würde..hat jemand nen tip wie ich einfach ein bild aus meinem timage einlesen kann?

danke
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 03:06
Schau mal hier: http://www.experts-exchange.com/Prog..._23981530.html

Der benutzt aber TBitmap mit Canvas.Pixels. Also genau der Flaschenhals.

Das Ganze könnte man beschleunigen, indem man entweder statt mit TBitmap mit TBitmap32 (Graphics32) arbeitet oder die Funktion auf ScanLine umstellt.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 08:49
Das Stichwort ist (Kreuz-)Korrelation.

Zwei Tipps:
1) Ich weiss zumindest von Poker Stars, dass sie regelmäßig die Tischgrafiken und die Positionen der Elemente minimal ändern. Dies soll wohl "Bots" stören, die pixelgenaue Bilder an festen Positionen erwarten. Letzteres hättest du mit obigem abgedeckt, man müsste dann nur etwas tolerant bei den eigentlichen Grafikschnipseln sein.
2) Solche Helferlein sind glaube ich in der Grauzone dessen, was die Pokerräume so erlauben. Und ja, die meisten haben Bot-Detection-Maßnahmen. Poker Stars geht zwar nur so weit, unplausibel schnell und weit auseinander gemachte Klicks bzw. Mausbewegungen zu melden, aber im Grunde hindert niemand einen daran die APIs zum Screenshotten zu hooken und bei regelmäßiger Nutzung dies auch zu munieren.
Lass deine Bankroll also nicht zu sehr anschwellen, nicht dass deine Reichtümer dann plötzlich doch gesperrt werden =)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#4

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 14:07
ich werde mir die korrelation mal ansehen, danke.

Der holdem Indicator der sogar statistiken über spieler etc trackt ist in über 200 der grössten onlinepokerseiten (inkl pokerstars) nicht nur erlaubt - sie bewerben solche tools sogar. statistiken zu errechnen ist schon lange keine grauzone mehr...online so ziemlich gang und gebe
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 16:46
Do you even search bro?

Edit: Zum eigentlichen Problem und nicht zu der gefragten Lösung..
Ich würd da ganz anders vorgehen:
Zuerst würd ich nach einer Schnittstellen- bzw. Spielprotokollbeschreibung vom Hersteller suchen -> existiert sie nicht, so würd ich das Protokoll reverse engineeren.
Als nächstes würd ich mich den Netzwerk Trafic mithören und die mir wichtigen Informationen extrahieren.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (16. Jul 2014 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#6

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 19:36
klar ist das lesen der informationen die der Client erhält um den tisch etc grafisch anzuzeigen der perfekteste weg...allerdings auch der schwierigste - von einer encryption mal ganz zu schweigen...das hab ich mir gleich abgeschminkt ;D

dein link sieht ganz interessant aus, ich probiere damit nachher mal rum wenn ich zuhause bin. eine "leichte" lösung scheint es für dieses "problem" offensichtlich nicht zu geben

was haltet ihr von der idee den gemachten screenshot in einen string umzuwandeln und das gesuchte bitmap auf diesem wege via stream zu vergleichen?


EDIT: das mit FASTNCC zu lösen, vlt über OpenCV scheint mir die beste möglichkeit zu sein.?!

Geändert von rhodan (16. Jul 2014 um 21:14 Uhr)
  Mit Zitat antworten Zitat
Sinderion

Registriert seit: 23. Nov 2007
Ort: Oberösterreich
19 Beiträge
 
Delphi XE7 Architect
 
#7

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 23:22
Bei Pokerstars gäbe es ein Logfile, dass man auslesen könnte.
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#8

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 16. Jul 2014, 23:48
wenn ich ehrlich bin gehts mir gar nicht um irgendein onlinepoker in erster linie, ich versuche mich an einem singleplayer Holdem...OpenCV bietet die möglichkeit des "bildervergleichs" auf der basis von Template Matching..ich hab allerdings probleme das zu installieren oO
ich gehe mal von meiner unfähigkeit aus bzw mangelnden kenntnissen.

http://www.delphipraxis.net/181114-o...ml#post1265727
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 17. Jul 2014, 01:32
OpenCV ist dafür absolut mit Kanonen auf Spatzen geschossen. Erspar dir den Aufwand es zum Laufen zu bringen und implementier die Suche selbst. So schwer ist das nun auch nicht (vorausgesetzt, das gesuchte Bitmap ist 1:1 so im Screenshot enthalten und nicht irgendwie verzerrt o.ä.).

Geändert von Namenloser (17. Jul 2014 um 01:34 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

AW: Kleine Bitmap in einer größeren Bitmap finden

  Alt 17. Jul 2014, 08:26
Und ob du jetzt in einem String oder einem Bild nach Mustern suchst, ist gehoppst wie gesprungen. Das läuft im Wesentlichen auf dasselbe Verfahren hinaus, und bei Strings wirst du ggf. Probleme mit #0 bekommen. Zudem würdest du dir den zweidimensionalen Zusammenhang kaputt machen, wüsstest also nicht mehr, welche Zeilen/Spalten unter-/nebeneinander sind, und könntest bestenfalls noch 1px dicke "Subbilder" finden.
Das von Aphton verlinkte Verfahren ist mit die einfachste Variante die man ansetzen könnte, und böte sogar die Option mit Toleranz vorzugehen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz