AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi GetPixel() funktioniert irgendwie nicht :(
Thema durchsuchen
Ansicht
Themen-Optionen

GetPixel() funktioniert irgendwie nicht :(

Ein Thema von Wusel · begonnen am 23. Jan 2005 · letzter Beitrag vom 27. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#1

GetPixel() funktioniert irgendwie nicht :(

  Alt 23. Jan 2005, 20:45
Guten Abend an alle

Also irgendwie funktioniert GetPixel nur so halb, aber ich denke eher, dass ich einen Fehler gemacht habe
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:
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;
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!
Was mach ich denn falsch?



Wusel
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#2

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 23. Jan 2005, 21:14
Zitat von Wusel:
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
Ohne jetzt näher auf das Problem einzugehen: Warum holst du dir dann nicht einfach die gesuchten Pixelfarben über dein erstelltes Bitmap?
Oder ist dir das zu langsam?
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#3

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 23. Jan 2005, 22:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#4

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 18:48
Hat keiner 'ne Idee, warum GetPixel da nicht richtig mitmachen will?
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 19:05
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;
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#6

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 19:42
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??
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#7

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 20:05
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
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#8

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 20:08
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?
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#9

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 20:11
Könnt ja ne inkosistenz in der WinApi sein,

hast ma mit aus einem anderen Prog versucht die Pixels zu bekommen?

DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#10

Re: GetPixel() funktioniert irgendwie nicht :(

  Alt 24. Jan 2005, 20:14
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:27 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