Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pixel aus aktivem Fenster lesen... (https://www.delphipraxis.net/135137-pixel-aus-aktivem-fenster-lesen.html)

FaFu 5. Jun 2009 12:06


Pixel aus aktivem Fenster lesen...
 
Hallo,
ich brauch einen quellcode um aus einem aktiven Fenster die Pixel rauslesen zu können und dann daraufhin eine Taste zu drücken.
Also am Ende will ich eine bestimmte Taste gedrückt haben, wenn da was Gelbes oder Grünes auf dem Bild ist.
Ich hatte daran gedacht einfach einen Screen zu machen und den in Delphi zu laden und dort dann an betimmten positionen die pixel zu suchen....das ganze sollte jedoch relativ schnell gehen...hat jemand ne idee?
vllt. kann man ja auch direkt aus dem aktiven Fenster die Pixel "testen"...ich weiß aber nicht wie...
FaFu :?:

Aphton 5. Jun 2009 12:19

Re: Pixel aus aktivem Fenster lesen...
 
1. Hole Handle vom aktiven Fenster
2. Hole per GetDC den Device Handle
3. Erstelle eine Bitmap und kopiere den Inhalt des Device Handles auf die Bitmap per BitBlt 4. Nun kannst du in der Bitmap die Pixel auslesen (Pixels[]/per Scanline)...

Delphi-Quellcode:
//Beispiel
variablen:
  hWnd, DC vom Typ Cardinal,
  Rect vom Typ TRect,
  Bmp vom Typ TBitmap;

// Inhalt von Notepad wird ausgelesen:
  hWnd := FindWindow('Notepad',nil);
  GetWIndowRect( hWnd, Rect );
  DC   := GetDC( hWnd );
  Bmp  := TBitmap.Create;
  Bmp.Width := Rect.Right-Rect.Left;
  Bmp.Height := Rect.Bottom-Rect.Top;
  BitBlt( Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,
    DC, 0, 0, SRCCOPY );

  Canvas.Draw( 8, 8, Bmp );
MfG ;)

FaFu 5. Jun 2009 12:25

Re: Pixel aus aktivem Fenster lesen...
 
Okay...ich probiers mal! Danke!

FaFu 6. Jun 2009 13:17

Re: Pixel aus aktivem Fenster lesen...
 
Ich hatte davor das
Delphi-Quellcode:
var
  Bmp: TBitmap;
  color1:Tcolor;
  R,G,B: Integer;
begin
  Bmp := TBitmap.Create;

  try

    FormularScreenShot(Bmp, GetDesktopWindow);
    Canvas.Draw(0, 0, Bmp);
und jetzt nach dem anderen Vorschlag das:
Delphi-Quellcode:
var
  hWnd, DC: Cardinal;
  Rect: TRect;
  Bmp :TBitmap;
begin
 try
  hWnd := GetDesktopWindow;
  GetWindowRect( hWnd, Rect );
  DC   := GetDC( hWnd );
  Bmp  := TBitmap.Create;
  Bmp.Width := Rect.Right-Rect.Left;
  Bmp.Height := Rect.Bottom-Rect.Top;
  BitBlt( Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,
    DC, 0, 0, SRCCOPY );

  Canvas.Draw( 0, 0, Bmp );
 finally
   Bmp.Free;
Welches ist schneller und belastet somit weniger den prozessor?
mfG

Apollonius 6. Jun 2009 13:28

Re: Pixel aus aktivem Fenster lesen...
 
Es ist nicht gerade wahnsinnig klug, das Fenster zunächst in das Hintergrund-Bitmap und dieses dann auf das Formular zu kopieren.

FaFu 6. Jun 2009 13:31

Re: Pixel aus aktivem Fenster lesen...
 
Soll heißen...?

Gibt es eigentlich auch die Möglichkeit direkt aus dem Fenster bestimmte Farben zu erkennen ohne dieses erst in ein Bmp umzuwandeln?
Sozusagen Canvas.Pixels für das aktive Fenster?...
mfG

Apollonius 6. Jun 2009 13:35

Re: Pixel aus aktivem Fenster lesen...
 
Im unteren Codeschnipsel kopierst du das Bild zweimal. Wenn dich nur einzelne Pixel interessieren, kannst du dir eine neue Instanz von TCanvas erzeugen, den Device Context zuweisen und dann munter sämtliche Methoden und Eigenschaften eines Canvas nutzen.

Aphton 6. Jun 2009 13:39

Re: Pixel aus aktivem Fenster lesen...
 
Das mit dem "aufs Formular" zeichnen dient nur dazu, dass er sieht, dass es aufgenommen wurde ..

Nur DeviceContext zu ermitteln reicht in deinem Fall auch, falls du schon weißt, wo sich deine Pixel genau befinden und du nicht zuerst kucken musst.

Siehe dazu GetPixel() / SetPixel()

MfG

FaFu 6. Jun 2009 14:16

Re: Pixel aus aktivem Fenster lesen...
 
Sagen wir ich will den Farbwert von dem Pixel auf der Position 550,530 wissen auf dem aktiven Fenster...
Delphi-Quellcode:
var
color2: TColor;
R,G,B: Integer;
begin
color2 := GetPixel(?,550,530);
R := GetRValue(GetPixel(550,530));
G := GetGValue(GetPixel(550,530));
B := GetBValue(GetPixel(550,530));
Welcher Parameter fehlt bei dem '?' ?...
mfG

mkinzler 6. Jun 2009 14:18

Re: Pixel aus aktivem Fenster lesen...
 
Kennst du die F1-Taste?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Seite 1 von 2  1 2      

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