![]() |
Re: Pixelfarbe abfragen mit Delphi
hab ich, gibt bei allen pixeln -1 oder den wert für windows-grau aus :|
ich versuche schon, alle mir unbekannten bezeichnungen in deinem code rauszufinden, ist wirklich nicht einfach! respekt für deine leistung und ein riesendanke für deine hilfsbereitschaft :cheers: |
Re: Pixelfarbe abfragen mit Delphi
Ich habs gerade ausprobiert. Meistens funktionierts, aber gelegentlich bekomme ich wieder Werte die nicht stimmen können. Inaktive Titelleisten liefern z.B. immer $FFFFFFFF und gelegentlich bekomme ich für Farben ausserhalb des Testprogs auffällig falsche Werte. Hab aber noch kein System dahinter entdecken können.
|
Re: Pixelfarbe abfragen mit Delphi
Hallo Leuts!
Vorsicht, Screen und Client-Koordinaten nicht miteinander mixen. Wenn Du / ihr alle Pixel erfassen möchtet, dann reicht es nicht auf den Client Device Kontext des Fenstern zuzugreifen. Daher ist GetDC in diesem Falle der falsche Befehl. Hier mal ein kleines Demo mit zwei Timern. Ich denke es ist selbsterklärend.
Delphi-Quellcode:
Und an alle Rosinensucher: Ja ich weiss was ein Mousehook ist. :cyclops:
procedure TForm1.Timer1Timer(Sender: TObject);
Var Pt:TPoint; DC:HDC; Col:TColorRef; hBr,OldBr:HBrush; begin GetCursorPos(Pt); DC:=CreateDC('DISPLAY',NIL,NIL,NIL); // Desktop DC Try Col:=GetPixel(DC,Pt.x,Pt.y); hBr:=CreateSolidBrush(Col); OldBr:=SelectObject(Canvas.Handle,hBr); Rectangle(Canvas.Handle,10,10,100,100); Finally SelectObject(Canvas.Handle,OldBr); DeleteObject(hBr); DeleteDC(DC); End; end; procedure TForm1.Timer2Timer(Sender: TObject); Var DC:HDC; Wnd:HWnd; Rect:TRect; Pt:TPoint; Col:TColorRef; hBr,OldBr:HBrush; begin GetCursorPos(Pt); Wnd:=WindowFromPoint(Pt); if GetWindowRect(Wnd, Rect) then begin DC:=GetWindowDC(Wnd); // Window DC einschließlich NonClient Area Try Pt.X:=Pt.X-Rect.Left; Pt.Y:=Pt.Y-Rect.Top; GetPixel(DC, Pt.X, Pt.Y); Label1.Caption:=Format('X:%d; Y:%d',[Pt.x,Pt.y]); Col:=GetPixel(DC,Pt.x,Pt.y); hBr:=CreateSolidBrush(Col); OldBr:=SelectObject(Canvas.Handle,hBr); Rectangle(Canvas.Handle,200,10,300,100); Finally DeleteObject(hBr); SelectObject(Canvas.Handle,OldBr); ReleaseDC(Wnd, DC); End; End; end; Viele Grüsse OLLI |
Re: Pixelfarbe abfragen mit Delphi
vereinfacht ausgedrückt, liefert
Code:
auf label1 den farbwert des jeweiligen pixels, auf dem sich die maus befindet!
procedure TForm1.Timer1Timer(Sender: TObject);
Var Pt:TPoint; DC:HDC; begin GetCursorPos(Pt); DC:=CreateDC('DISPLAY',NIL,NIL,NIL); label1.Caption := inttostr(GetPixel(DC,Pt.x,Pt.y)); End; Problem gelöst, auf zum nächsten! DANKE AN ALLE |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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