Autor Beitrag
bruce185
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 283

winXP
D7 Ent
BeitragVerfasst: Di 02.06.09 20:48 
Hallo,
ich habe bei mir in TImage ein Bild und möchte Prüfen ob z.B. diese Farbe (#FF8080) vorhanden ist, wenn ja, dann möchte ich die Position, wo sich diese Farbe befindet, in Pixel ausgeben lassen.

Wie könnte ich das ambesten lösen?

Danke schonmal für die Hilfe.

MfG
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Di 02.06.09 21:01 
Hi,

eine Lösung währe es mit ScanLine das Bild nach diesem Farbwert zu durchforsten.

Einfach mal suchen Suche in der Delphi-PRAXiS SCANLINE
bruce185 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 283

winXP
D7 Ent
BeitragVerfasst: Di 02.06.09 21:42 
Vielen Dank.

Ich habe nur noch eine Frage:
Kann man von einem Flash Spiel nach bestimmte Farbe suchen von Delphi Programm aus?

Es müsste ja durch die URL oder so machbar sein, wenn ich mich nicht irre.

Danke schonmal.

MfG
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Di 02.06.09 21:46 
Ich kenne da jetzt nur eine Lösung :

In einem TWebBrowser das Spiel öffnen und dann ein Screendshot von dem TWebBroser Handle machen und dieses Bild dann analysieren. Weil bei so einem Spiel weißt du wenn man nur die URL hat ja nicht wo das Spiel jetzt gerade welche Objekte hat oder welche sogar noch beim Spielen nachgeladen weren.
bruce185 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 283

winXP
D7 Ent
BeitragVerfasst: Do 04.06.09 19:16 
Vielen Dank.

Kann man das nicht irgendwie über Fenster Handle machen?
Also Fenster suchen und dann das aktuelle Frame von Flash Player in mein Delphi Programm speichern als Bitmap?

MfG
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Do 04.06.09 19:20 
Natürlich kannst du auch das machen. :lol:
Musst dann halt mit FindWindow arbeiten und dann mal nen bischen suchen nach "Suche in der Entwickler-Ecke SCREENSHOT" da findet man auch wie man ein Fenster aufnehmen kann.

_________________
Tropby
bruce185 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 283

winXP
D7 Ent
BeitragVerfasst: Fr 05.06.09 16:16 
Danke Dir.

Ich habe diesen Quellcode um Screenshots zu erstellen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
function ScreenshotHidden(wnd: HWND; const bmp: TBitmap): Boolean;
var 
  rec: TRect;    //zum Zwischenspeichern der Fenstergröße 
  dllh: THandle; //Handle der user32.dll 
  PrintWindow: function(sHandle: HWND; dHandle: HDC; nFlags: UINT): BOOL; stdcall//Prototyp der verwendeten Funktion 
begin 
  Result := False;                     //Rückgabewert initialisieren 
  dllh := GetModuleHandle(user32);     //dll dynamisch laden... 
  if dllh <> 0 then 
  begin 
    @PrintWindow:= GetProcAddress(dllh , 'PrintWindow'); //die Funktionsadresse aus der Dll laden... 
    if @PrintWindow <> nil then 
    begin 
      GetWindowRect(wnd, rec);           //Größe des Fensters auslesen... 
      bmp.Width := rec.Right - rec.Left;   //...und die Bitmap-Größe anpassen 
      bmp.Height := rec.Bottom - rec.Top; 
      bmp.Canvas.Lock;                 //Zugriff auf den Canvas für andere Threads blockieren 
      try 
        result := PrintWindow(wnd, bmp.Canvas.Handle, 0); //Das Fenster zeichnet sich selbst in das HDC des Bitmaps 
      finally 
        bmp.Canvas.Unlock;             //Zugriff wieder erlauben 
      end
    end
  end
end;

procedure TForm1.Button2Click(Sender: TObject);
var 
  wnd: HWnd; 
begin
  wnd := FindWindow('Notepad',nil);  //Handle vom Notepad-Fenster
  if (wnd > 0then
  begin
    ScreenshotHidden(wnd, Image1.Picture.Bitmap);
    Image1.Invalidate;
    Button3.Click;
  end;
end;


Das Problem ist, das diese funktion ScreenshotHidden nicht sonderlich schnell ist, da ich über Timer1 diese funktion jede Millisekunde ausführe und das Programm sich dann einwenig aufhängt.

Gibt es eine bessere und schnellere Methode?

Vielen Dank schonmal.

MfG