Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pixelfarbe abfragen mit Delphi (https://www.delphipraxis.net/12440-pixelfarbe-abfragen-mit-delphi.html)

LeCorno 27. Nov 2003 20:31

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:

Sanchez 27. Nov 2003 20:48

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.

OLLI_T 27. Nov 2003 21:34

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:
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;
Und an alle Rosinensucher: Ja ich weiss was ein Mousehook ist. :cyclops:

Viele Grüsse

OLLI

LeCorno 28. Nov 2003 07:36

Re: Pixelfarbe abfragen mit Delphi
 
vereinfacht ausgedrückt, liefert

Code:
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;
auf label1 den farbwert des jeweiligen pixels, auf dem sich die maus befindet!

Problem gelöst, auf zum nächsten! DANKE AN ALLE


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Seite 2 von 2     12   

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