![]() |
GetPixel() funktioniert irgendwie nicht :(
Guten Abend an alle
Also irgendwie funktioniert GetPixel nur so halb, aber ich denke eher, dass ich einen Fehler gemacht habe :roll: Ich will einfach während ich spiele, ein Screenshot machen und aus dem Screenshot dann bestimmte Informationen holen (Zahlen). Das hab ich so gelöst, dass ich mir bestimmte Pixel anschaue, sie mit vorgegebenen Mustern von Zahlen vergleiche und dadurch die Zahl bekomme. Das geht in meinem Fall, da die Zahlen alle gleich breit sind und immer an der selben Stelle stehen. Es verändert sich halt nur der Betrag der Zahl. Das funktioniert auch so weit. Jedoch nur, wenn ich z.B. ein Screenshot als Hintergrundbild nehme. Wenn ich im Spiel selbst die Funktion mit GetPixel durchlaufen lasse, gibt GetPixel an jeder Stelle nur den Wert 0 zurück :( Hier der Code den ich verwende:
Delphi-Quellcode:
Also wie gesagt, wenn ich das im Spiel mache, gibt GetPixel nur 0 zurück. Das Komische ist aber, wenn ich imgDC mit BitBlt() an ein Handle von einem TBitmap übergebe und das Bitmap dann speichere, ist der Screenshot ganz normal da und an den Stellen, die GetPixel() prüfen soll ist definitiv eine Farbe!
var
imgDC : Cardinal; begin imgDC := 0; try imgDC := GetDC(0); for i := 0 to 6 do //7 Pixel prüfen, um eine Zahl zu identifizieren begin [...]GetPixel(imgDC, WSDotCoords[i].X, WSDotCoords[i].Y); [...] end; finally if imgDC <> 0 then ReleaseDC(0, imgDC); end; end; Was mach ich denn falsch? :( Wusel |
Re: GetPixel() funktioniert irgendwie nicht :(
Zitat:
Oder ist dir das zu langsam? |
Re: GetPixel() funktioniert irgendwie nicht :(
Wenn ich das TBitmap benutze, muss ich die Graphics Unit einbinden und dadurch wird mein Programm extrem groß. Habs nich um sonst hier in die Win-API Sparte geschrieben. Will hauptsächlig nur mit den HDCs arbeiten, aber das klappt ja nicht :(
|
Re: GetPixel() funktioniert irgendwie nicht :(
Hat keiner 'ne Idee, warum GetPixel da nicht richtig mitmachen will? :|
|
Re: GetPixel() funktioniert irgendwie nicht :(
event. ist der von dir mittels 'GetDC' organisierte 'device context' in dem Falle nicht mehr gültig? Versuche es doch auch mal mit 'CreateDC', z.B. so wie in der folgenden kurz-Proc:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var DC : HDC; AColor : array[1..4] of byte; begin DC:=CreateDC('DISPLAY',NIL,NIL,NIL); DWord(AColor) := GetPixel(DC,Mouse.CursorPos.X,Mouse.CursorPos.Y); DeleteDC(DC); Label1.Caption := 'R: ' + IntToStr(AColor[1]) + '; ' + 'G: ' + IntToStr(AColor[2]) + '; ' + 'B: ' + IntToStr(AColor[3]); end; |
Re: GetPixel() funktioniert irgendwie nicht :(
Nein, spielt keine Rolle. Habs versucht mit dem CreateDC, kommt aber auch überall 0 raus, wenn ich es im Spiel mache.
Habs so probiert, dass es die Werte erst speichert und dann, wenn ich aus dem Spiel raus bin, durch nen Tastendruck die Werte ausgibt --> 0 Wenn ich die Werte an ein Label o.ä. übergebe, während ich noch im Spiel bin (also wenn das DC auf jeden Fall noch gültig ist) --> 0 Jedoch kann es in beiden Fällen aus dem DC mittels BitBlt ein TBitmap erstellen :?: Wenn ich nur auf dem Desktop bin, funktioniert alles, wie es soll ... was ist so unterschiedlich an den DCs während des Spiels und 'normal' im Windows?? |
Re: GetPixel() funktioniert irgendwie nicht :(
Hi,
wenn dein Spiel via DirectX auf den Bildschirm pinselt, dann geht das vielleicht generell nicht, das Pixel über den ganzen Devive Context wieder auszulesen... ich würd also erstma mit einem zweite Delphi Exe experimentieren, die grob das gleiche macht wie dein Spiel (Zahlen mahlen) DerDan |
Re: GetPixel() funktioniert irgendwie nicht :(
Ja, das Spiel läuft über DirectX, aber warum kann ich dann mit dem DC, mit welchem GetPixel nur 0 zurückgibt, mittels BitBlt ein TBitmap erzeugen, welches dann das richtige Bild enthält?
|
Re: GetPixel() funktioniert irgendwie nicht :(
Könnt ja ne inkosistenz in der WinApi sein,
hast ma mit aus einem anderen Prog versucht die Pixels zu bekommen? DerDan |
Re: GetPixel() funktioniert irgendwie nicht :(
Wie bereits geschrieben, funktioniert es 'normal' unter Windows mit jedem anderen Fenster/Programm. Sollte halt auch nicht so viel umgerechnet und so werden, da es sonst einen kleinen (oder größeren) Ruckler im Spiel gibt und das wollt ich weitestgehend vermeiden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz