AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit RGB-Suchtool
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit RGB-Suchtool

Ein Thema von rhodan · begonnen am 5. Mär 2008 · letzter Beitrag vom 8. Mär 2008
Antwort Antwort
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit RGB-Suchtool

  Alt 5. Mär 2008, 19:48
Abend Community

Ich bin gerade etwas verwirrt.
Folgender Code sollte eigentlich auf Knopfdruck den unter findwindow angegebenen Fenstertitel in den Vordergrund holen und ihn nach RGB Werten die ich unter 'public' vorher deklariert habe absuchen.
Wird das Programm fündig erscheint ein Button auf dem 'Gefunden!' steht.

Seltsam ist nur: wenn ich z.B Windows Pinball auf diese weise absuche scheint er JEDEN RGB Wert den ich vorher festlege in dem Spiel zu finden (selbst wenn diese Farbe gar nicht vorkommt).
Erschaffe ich allerdings ein eigenes Projekt mit schwarzem Hintergrund und einem roten Panel darauf, scheint er nicht mal das Rot dort zu finden (die genauen RGB Werte hab ich mir mit Photoshop angeguckt)

Wäre jemand vielleicht so freundlich einen kurzen blick auf den code zu werfen bzw. einen kurzen Test zu machen und mir zu sagen ob ich Müll geschrieben hab oder nicht? Ich traue den Ergebnissen nicht mehr ^^.
(auf dem formular sind nur 2 buttons wobei button1 auf visible:=false steht).

Delphi-Quellcode:
  public
pixel_R: 150..150;
pixel_G: 4..4;      //RGB Werte nach denen unten mit 'getRvalue' etc. gesucht werden soll
pixel_B: 30..30;
width, height:integer;
posx,posy:integer;
x,y : integer;
  end;

procedure TForm1.Button2Click(Sender: TObject);
var
game_hwnd : hwnd;
dc : hdc;
pixel:colorref;
get_dc:integer;
prect:Trect;
begin
game_hwnd := findwindow(nil,'3D-Pinball für Windows - Space Cadet');
showwindow (game_hwnd, sw_restore);
setforegroundwindow(game_hwnd);
setfocus;

getwindowrect(game_hwnd,prect);   // Rechteck wird gezeichnet in dem nach RGB Werten gesucht werden soll.
width:=prect.right-prect.left;
height:=prect.Bottom-prect.Top;
posx:=prect.left;
posy:=prect.Top;

dc:=getdc(game_hwnd);
pixel:=getpixel(dc,x,y);

if
(getRvalue(pixel)=pixel_R) and
(getGvalue(pixel)=pixel_G) and      //Pixel werden auf die oben in 'Public' angegebenen RGB werte kontrolliert..
(getBvalue(pixel)=pixel_B) then
begin
button1.Visible:=true;      
end;
end;

end.
Bzw. wäre es auch möglich die Koordinaten des gefundenen Pixels anstatt des 'Gefunden!' in der Caption von Button1 erscheinen zu lassen?

Vielen lieben dank & schönen Abend

gruß rhodan
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Problem mit RGB-Suchtool

  Alt 5. Mär 2008, 20:02
Ich habe auch mal sowas programmiert - einen Bot für Hier im Forum suchenHeiliger Damm

Ich nehme mal an, du hast das Handle bereits, dann musst du dir nen DC besorgen (Hast du getan) und ...

Dewr einzige untershcied ist - soweit ich das jetzt auf den 1. Blick sehe - dass du mit GetPixel arbeitetst ....

Delphi-Quellcode:
BitBlt(Bild.Canvas.Handle, 0, 0, CopyWidth, CopyHeight, HDdc, 0, 0, SRCCOPY); // Kopiert das Bild des Spiels in ein Bitmap

  index := 0;
  SetLength(Points, 10);


  GetWindowRect(HDwnd, HDrect);
    HDrect.Top := HDrect.Top + GetSystemMetrics(SM_CYCAPTION);
    for i := 0 to Bild.Height - 1 do
    begin
      Pixel := Bild.ScanLine[i];
      for j := 0 to Bild.Width - 1 do
      begin
        if (Pixel^.rgbtRed in [SpotRed-Toleranz .. SpotRed+Toleranz]) and (Pixel^.rgbtGreen in [SpotGreen-Toleranz .. SpotGreen+Toleranz]) and (Pixel^.rgbtBlue in [SpotBlue-Toleranz .. SpotBlue+Toleranz]) then
        begin
          Bild.Canvas.Ellipse(j - 25, i - 25, j + 25, i + 25); // "markiert" den Fundort (X=j, Y=i)

        end;
        Inc(Pixel);
      end;
Versuch mal 3 Dinge:
Kopier den DC, den du hast, auf dein Form in ein Image - ob du auch das richtige hast
Delphi-Quellcode:
StretchBlt(PaintBox1.Canvas.Handle,
    0,
    0,
    PaintBox1.Width,
    PaintBox1.Height,
    Bild.Canvas.Handle,
    0,
    0,
    CopyWidth,
    CopyHeight,
    SRCCOPY);
Debug das durch, und schau mal was da beim Verglich schiefläuft
keine Ahnung ^^
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#3

Re: Problem mit RGB-Suchtool

  Alt 8. Mär 2008, 18:26
danke dir, problem hat sich gelöst
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:46 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