Entwickler-Ecke

Windows API - Farbe eines Pixels ausserhalb von Form auslesen ?


Nilsener - So 05.10.03 17:40
Titel: Farbe eines Pixels ausserhalb von Form auslesen ?
Hallo, ist es möglich die Farbe eines Pixels irgendwo auf dem Bildschirm zu bestimmen, auch wenn es ausserhalb von Form liegt ? Also eine Function, der man die x,y Koordinate übergibt und die dann die Farbe zurückliefert ?

Gruss Nils

Moderiert von user profile iconTino: Titel geändert & Topic verschoben.


Tino - Mo 06.10.03 09:43

Hallo!

Willst du die Farbe bestimmen (also setzen) oder möchtest du die Farbe auslesen?

Gruß
Tino


Takeshi - Mo 06.10.03 15:44

das finde ich auch interessant, hab mir mal gewünscht sowas zu machen, kann aber leider nicht helfen. wenn ich mir aber erlauben darf, folgende frage zustellen:
also war nur so ein gedankengang, dass man irgendwo hinklickt und dann den farbwert dieses punktes bekommt - wie kann man denn einen klick außerhalb der form feststellen?

gruß, Takeshi


Nilsener - Mo 06.10.03 17:00

Hallo, ich möchte die Farbe auslesen.

Gruss Nils


maximus - Mo 06.10.03 17:07

Hallo suchst du evtl. sowas hier?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function DesktopColor(const x,y:integer):TColor; 
var c: TCanvas; 
begin 
c:=TCanvas.create; 
c.handle:=GetWindowDC(GetDesktopWindow); 
result:=getpixel(c.handle,x,y); 
c.free; 
end;


kleiner tipp noch, wenn du diese operation sehr oft durchfühst, dann würd ich die function zerpflüken und mir das 'c.handle', sprich das ganze canvas, dauerhaft vormerken :wink:

hoffe konnte helfen?

PS: du brauchst eigentlich nur das handle, nur wenn du noch andere sachen mit dem desktop machen willst, dann is das canvas ganz praktisch!


Tino - Di 07.10.03 09:32

Ist es notwendig das Canvas-Objekt zu benutzen? Es könnte doch auch so gehen:

Delphi-Quelltext
1:
2:
3:
4:
Function DesktopColor (Const x, y: Integer): TColor;  
Begin
  Result := GetPixel (GetWindowDC (GetDesktopWindow), x, y);  
End;

Gruß
Tino


Motzi - Di 07.10.03 10:10

@Tino: du musst das DC-Handle aber auch wieder freigeben!!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function DesktopColor (Const x, y: Integer): TColor;   
var
  DC: HDC;
begin 
  HDC := GetWindowDC(GetDesktopWindow);
  Result := GetPixel (DC, x, y);   
  ReleaseDC(GetDesktopWindow, DC);
end;


maximus - Di 07.10.03 10:12

Nein ist natürlich nicht notwendig tino! Habs aber auch schon in meinem post-scriptum angemerkt.


Nilsener - Di 07.10.03 16:07

Vielen Dank für Eure Hilfen, läuft schon ganz gut jetzt, nur noch ein bischen langsam. Ich stelle einen Ausschnitt des Desktops in einem Image Fenster dar und wiederhole permanent mit möglichst hoher Geschwindigkeit.

maximus hat foldendes angemerkt :
"kleiner tipp noch, wenn du diese operation sehr oft durchfühst, dann würd ich die function zerpflüken und mir das 'c.handle', sprich das ganze canvas, dauerhaft vormerken."

Erhöht das die Geschwindigkeit, und wie mache ich das was maximus meint genau ? Im Moment übersteigt es noch meinen Anfängerverstand.

Gruss Nils


Keldorn - Di 07.10.03 16:14

es gibt im EDH (auf http://www.delphi-treff.de) einen eintrag wie man eine screenshot vom dektop schießen kann. Dort bekommst du eine Bitmap, wenn ich mich richtig erinnere. sollte schneller sein, als jedes pixel einzeln auszulesen.
Gugg dort mal nach.


Motzi - Di 07.10.03 16:30

Wenn es um den ganzen Desktop geht schon, aber wenn ich nur einen einzelnen Pixel brauch ist es wohl ein bisschen übertrieben gleich den ganzen Desktop in ein Bitmap zu schmeißen! ;)


Keldorn - Di 07.10.03 16:47

Motzi hat folgendes geschrieben:
Wenn es um den ganzen Desktop geht schon, aber wenn ich nur einen einzelnen Pixel brauch ist es wohl ein bisschen übertrieben gleich den ganzen Desktop in ein Bitmap zu schmeißen! ;)

ich beziehe mich hierdrauf:
Zitat:

stelle einen Ausschnitt des Desktops in einem Image Fenster dar

und bin davon ausgegenagen, das der ausschnitt nicht bloß ein pixel groß sein wird :wink: Frank


Motzi - Di 07.10.03 21:53

Oops.. den Teil hab ich irgendwie übersehn.. :oops: :roll: