AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Pixel aus aktivem Fenster lesen...
Thema durchsuchen
Ansicht
Themen-Optionen

Pixel aus aktivem Fenster lesen...

Ein Thema von FaFu · begonnen am 5. Jun 2009 · letzter Beitrag vom 6. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
FaFu
(Gast)

n/a Beiträge
 
#1

Pixel aus aktivem Fenster lesen...

  Alt 5. Jun 2009, 12:06
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
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Pixel aus aktivem Fenster lesen...

  Alt 5. Jun 2009, 12:19
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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
FaFu
(Gast)

n/a Beiträge
 
#3

Re: Pixel aus aktivem Fenster lesen...

  Alt 5. Jun 2009, 12:25
Okay...ich probiers mal! Danke!
  Mit Zitat antworten Zitat
FaFu
(Gast)

n/a Beiträge
 
#4

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 13:17
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 13:28
Es ist nicht gerade wahnsinnig klug, das Fenster zunächst in das Hintergrund-Bitmap und dieses dann auf das Formular zu kopieren.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
FaFu
(Gast)

n/a Beiträge
 
#6

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 13:31
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 13:35
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 13:39
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
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
FaFu
(Gast)

n/a Beiträge
 
#9

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 14:16
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Pixel aus aktivem Fenster lesen...

  Alt 6. Jun 2009, 14:18
Kennst du die F1-Taste?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:45 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