Entwickler-Ecke
Multimedia / Grafik - Prüfen ob im Bild eine bestimmte Farbe vorhanden ist?
bruce185 - Di 02.06.09 20:48
Titel: Prüfen ob im Bild eine bestimmte Farbe vorhanden ist?
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 - 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
SCANLINE
bruce185 - 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 - 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 - 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 - 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 "
SCREENSHOT" da findet man auch wie man ein Fenster aufnehmen kann.
bruce185 - Fr 05.06.09 16:16
Danke Dir.
Ich habe diesen Quellcode um Screenshots zu erstellen:
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; dllh: THandle; PrintWindow: function(sHandle: HWND; dHandle: HDC; nFlags: UINT): BOOL; stdcall; begin Result := False; dllh := GetModuleHandle(user32); if dllh <> 0 then begin @PrintWindow:= GetProcAddress(dllh , 'PrintWindow'); if @PrintWindow <> nil then begin GetWindowRect(wnd, rec); bmp.Width := rec.Right - rec.Left; bmp.Height := rec.Bottom - rec.Top; bmp.Canvas.Lock; try result := PrintWindow(wnd, bmp.Canvas.Handle, 0); finally bmp.Canvas.Unlock; end; end; end; end;
procedure TForm1.Button2Click(Sender: TObject); var wnd: HWnd; begin wnd := FindWindow('Notepad',nil); if (wnd > 0) then 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!