AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Welche Farbe hat der Pixel?

Ein Thema von Schilkschi · begonnen am 28. Dez 2005 · letzter Beitrag vom 29. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2   
Schilkschi

Registriert seit: 25. Mai 2004
16 Beiträge
 
#1

Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 13:56
Also liebe Programmierer
Stehe vor einem Problem

Ich habe ein Program geöffnet und möchte überprüfen oder der Pixel x,y die Farbe 000000 hat oder gleich dem pixel ist aus einem screenshot. Falls das der Fall ist soll ein Tastendruck simuliert bzw mehrere hintereinander(esc+pfeilhoch+enter) werden.
Mein Problem ist es nun ich möchte nicht 10k screenshots machen da das zu lange dauert und recourcenfressen ist wie ihr euch sicherlich denken könnt, sonder halt nur 1-10 pixel überprüfen, das aber jede Sekunde oder noch schneller wenn es geht.

Mein Programm läuft im Hintergrund ist also nicht aktiv (ich weiß nich ob das relevant ist, denke aber schon).
Tastendruck simulieren hab ich schon nach gesucht und das dürfte kein Problem sein aber das mit dem überprüfen hab ich nirgens gefunden.
In Delphi natürlich

Hoffe auf eure Hilfe!
  Mit Zitat antworten Zitat
Cookiemaster

Registriert seit: 26. Dez 2005
7 Beiträge
 
#2

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 16:45
Schau doch mal im Delphi Menü -> Hilfe -> Windows-SDK
Und im Index suchen nach diesen Funktionen:
GetDesktopWindow -> Window-Handle des gesamten Bildschirms holen
GetDC -> Device Context für ein Window-Handle holen.
GetPixel -> Pixelfarbe eines bestimmten Bildpunktes

Zusammen sollte es dann in etwa so aussehen:
Delphi-Quellcode:
var
  hdcDesktop : HDC;
  crefPixel : COLORREF;
begin
  hdcDesktop := GetDC(GetDesktopWindow);

  crefPixel := GetPixel(hdcDesktop, 50, 50);
  ...
  ReleaseDC(GetDesktopWindow, hdcDesktop);
end;
Hab aber nicht getestet ob es wirklich funktioniert.
  Mit Zitat antworten Zitat
Schilkschi

Registriert seit: 25. Mai 2004
16 Beiträge
 
#3

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 17:39
Also ich bin nicht so gut in Delphi also immer schön langsam
Erstmal danke für deine Hilfe aber hier eine kleine Prüfprozedur die mir immer wiederdas selbe ergenis leifert

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hdcDesktop : HDC;
  crefPixel : COLORREF;
begin
  randomize;

  hdcDesktop := GetDC(GetDesktopWindow);
  crefPixel := GetPixel(hdcDesktop, random(500), random(500));

  Label1.caption:=inttostr(crefpixel);

  ReleaseDC(GetDesktopWindow, hdcDesktop);
end;
4294967295 ist das ergnis
Und ich hab keine Ahnung was mir das sagt XD
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#4

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 19:13
Also ich wusste gar nicht dass es COLORREF gibt. Hätte TColor oder Cardinal benutzt.
Ausserdem: Anstatt GetDesktopWindow einfach ne 0 schreiben, kommt aufs Selbe raus.
Gibt GetDesktopWindow auch einfach nur 0 zurück? Wenn ja, isses die überflüssigste Funktion aller Zeiten

Edit: Randomize nur im OnCreate-Ereignis schreiben, nicht mehrmals aufrufen.
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 20:06
Zitat von Rastaman:
Also ich wusste gar nicht dass es COLORREF gibt.
COLORREF ist der Rückgabewert der API-Funktion, warum also nicht auch für die Variable benutzen. Allerdings dürfte es Schilkschis Zahl gar nicht geben, da in COLORREF der Alphakanal immer 0 ist, die Werte also nur bis 2^24 - 1 gehen .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Schilkschi

Registriert seit: 25. Mai 2004
16 Beiträge
 
#6

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 20:47
tjo das bringt mich ja jetzt so null weiter ne ^^
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 21:47
Hi,
guckst du mal im MSDN: MSDN-Library durchsuchenCOLORREF.

Chris
  Mit Zitat antworten Zitat
MasterDG

Registriert seit: 29. Sep 2004
54 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 21:51
Hallo!

Also der Wert lässt sich ganz einfach erklären:

Zitat:
The return value is the RGB value of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.
Dieser Wert CLR_INVALID ist 4294967295.

Allerdings liegt der Wert doch mit max 500 in dem Bereich der angezeigt wird!

Gruß
MasterDG
Dominik
Grüße Dominik
  Mit Zitat antworten Zitat
Cookiemaster

Registriert seit: 26. Dez 2005
7 Beiträge
 
#9

Re: Welche Farbe hat der Pixel?

  Alt 28. Dez 2005, 23:48
Sorry ^^ aber ich hab das auch nur auf die schnelle zusammengestrickt.

Als Entschädigung hier der richtige Code:
Delphi-Quellcode:
// Form1 enthält
// 1 TTimer Objekt, Intervall = 100
// 1 TEdit namens Koord
// 1 TEdit namens Color

// die OnTimer Prozedur des Timers sieht so aus:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  hDesk : HWND;
  hdcDesktop : HDC;
  crefPixel : COLORREF;
  p : TPoint;
begin
  GetCursorPos(p);
  Koord.Text := 'X = ' + inttostr(p.x) + ' Y = ' + inttostr(p.y);

  hDesk := GetDesktopWindow;
  hdcDesktop := GetWindowDC(hDesk);

  crefPixel := GetPixel(hdcDesktop, p.x, p.y);
  color.Text := inttostr(crefPixel);
  ReleaseDC(hDesk, hdcDesktop);
end;
Allerdings schreibt HIER jemand, dass er bei einem ähnlichen Programm in Visual Basic ein Memory-Leak hat.
Hab das mal kurz getestet mit dem Task-Manager. Am Anfang braucht mein Programm 2004 kB Speicher, das wird dann auch tatsächlich immer mehr... immer wenn ich mit der Maus über ein "neues" Fenster drüberfahre (wo die Maus vorher noch nicht war) wird es mehr.
Nach einiger Zeit sind es dann 2388 KB Speicher.
  Mit Zitat antworten Zitat
Schilkschi

Registriert seit: 25. Mai 2004
16 Beiträge
 
#10

Re: Welche Farbe hat der Pixel?

  Alt 29. Dez 2005, 02:28
Wow du hast mir echt weitergeholfen!
Selbst bei einem Timerintervall von 1 kommen ei mir keine Speicherprobleme auf.
Vielen Dank der Quelltext über mir funktioniert einwandfrei!

-----------------
Suchbegriffe:
Pixelfarbe Pixel Farbe GetWindowDC GetPixelb
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:00 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