![]() |
Webcam-Entwicklung: Brauche Eure Hilfe!
Ich möchte meine Webcam Software soweit bekommen, dass sie alle paar Sekunden ein Bild als JPG auf meinen FTP-Server lädt. Die Webcam komponenten funktionieren soweit, gleich werde ich noch eine Timer-Komponente hinzufügen und dann muss ich noch sehen, wie ich einen JPG auf Festplatte bekomme. Und dann brauche ich wohl Indy...
Gleich zu anfang: Ich habe absolut keine Ahnung von Indy, habe es soeben in mein Delphi7 nachinstalliert und nun schon das erste Problem: Wo ist mein Indy? In der Komponentenleiste ist weit und breit nichts zu sehen... |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
OK, was eine Neuinstallation so alles bewirkt... die Indy-Leiste ist wieder da.
Inzwischen habe ich ein kleines FTP-Demo gefunden, das mit Indy läuft. Es sieht sehr einfach aus. Er conncted jetzt korrekt auf meinen Server und läd eine Datei hoch, aber auf dem FTP hat die Datei einen anderen Namen, sieht wie ein Temp-Name aus. In der FTP-Demo wurde komischerweise nichts dazu gesagt und nichts dagegen unternommen. Was mache ich denn da jetzt? Renamen? Wenn ja wie? Achja, und wofür ist idAntiFreeze da? |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
idAntiFreeze bewirkt, dass das Programm auch während eines Down- oder Uploads einer Indy-Komponente die Messages abarbeitet.
Gruß |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Kann ich über Indy ein Bild direkt auf den FTP laden? Oder muss ich wirklich erst die Bitmap als JPG konvertieren, auf Festplatte als Datei abspeichern und dann die Datei hochladen?
|
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Du kannst den Stream direkt hochladen.
|
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Per FTP kannst du nur eine Datei von A nach B senden. Die Datei muss also schon fix und fertig, so wie du sie haben willst auf der Platte liegen.
Der Put Befehl bei der Indy-Komponente ist überladen. Es gibt auch eine Version, bei der du Quell- und Zieldateiname angeben kannst. Setzt du beide gleich, sollte dein Namensproblem verschwunden sein. Edit: Stimmt, einen Stream kannst du auch direkt schicken, falls du denn einen hast... |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
OK, dann muss ich erst die JPG-Datei auf Platte speichern. Die Dateinamen auf dem FTP stimmen jetzt auch.
Neues Problem: Mein Programm frisst Speicher. Jedesmal wenn ich in meine TImage Komponente den gegrabbten Frame zwischenspeichere, wird mein Speicher voller und voller. Was muss ich denn hier machen? Irgendwas mit Image1.Free? |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Zeig mal den Code, wann was wo passiert.
|
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Delphi-Quellcode:
procedure processGrab;
begin Form1.tsCap321.CapOrder:=start; Form1.tsCap321.CapOrder:=grab; <---------------------- eigentlicher Frame wird gegrabbt Form1.tsCap321.CapOrder:=stop; end; procedure TForm1.Timer1Timer(Sender: TObject); <---------------- Timer-Intervall liegt bei 10 Sek var time1,time2: ttimestamp; begin if ready then begin Label10.caption:='Status: sending ...'; time1:=DateTimeToTimeStamp(Time); processGrab; processFTP; time2:=DateTimeToTimeStamp(Time); processtime:=time2.time-time1.time; Label11.caption:='Processtime: '+inttostr(processtime)+' ms'; Label10.caption:='Status: waiting ...'; end; end; procedure TForm1.tsCap321Bitmap(Sender: TObject; Bitmap: TBitmap; msSinceFirstFrame: Cardinal); var datei: string; begin Image1.Picture.Bitmap:=Bitmap; <--------------------------- hier scheint der Speicher vollzulaufen datei:=Extractfilepath(Application.exename)+'/'+fname; with TJpegImage.Create do try Assign(Image1.Picture.Graphic); SaveToFile(datei); finally Free; end; end; |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Zitat:
Sonst würde ich mal das vorschlagen:
Delphi-Quellcode:
with TJpegImage.Create do
begin Assign(Bitmap); SaveToFile('C:\Screens\ScreenShot.jpg'); free; end; |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Au mann... habn Brett vorm Kopf :D
Aber der Speicher läuft immernoch voll. Konnte aber jetzt den Übertäter einkreisen:
Delphi-Quellcode:
Hmmmm... ich fürchte jetzt kann mir nur wer weiterhelfen, der Erfahrung mit tsCap32 hat...
procedure processGrab;
begin Form1.tsCap321.CapOrder:=start; Form1.tsCap321.CapOrder:=grab; <-- jedesmal werden 2MB auf den Speicher addiert Form1.tsCap321.CapOrder:=stop; end; |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Noch eine Überlegung: Der grab Befehl löst jedesmal OnBitmap aus, wobei jedesmal eine Bitmap erzeugt wird. Kann es sein, dass er immerwieder neue Bitmaps erzeugt und die alten nicht aus dem Speicher löscht? Wie werde ich diese Bitmaps in
Delphi-Quellcode:
wieder los?
procedure TForm1.tsCap321Bitmap(Sender: TObject; Bitmap: TBitmap;
msSinceFirstFrame: Cardinal); |
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
OK, jetzt klappts. Es fehlte ein Bitmap.Destroy ... := Danke für die zahlreichen Tips :)
|
Re: Webcam-Entwicklung: Brauche Eure Hilfe!
Hallo, ich versuche etwas ähnliches nur, das ich das ganze streamen möchte....
Komme mit dieser Komponente nicht ganz klar, und zwar verstehe ich icht wie OnBitmap aufgerufen wird.... Also ich möchte das Bild Grabben, und das gegrabbte bild dann in einem TImage angezeigt wird. Ich habe s bis jetzt so gemacht:
Delphi-Quellcode:
Im vorruas vielen Dank
unit videotest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, tsLogBox, ExtCtrls, tscap32_rt, Menus; type TForm1 = class(TForm) tsCap321: TtsCap32; tsLogBox1: TtsLogBox; tsCap32Dialogs1: TtsCap32Dialogs; tsCap32PopupMenu1: TtsCap32PopupMenu; Button1: TButton; Image1: TImage; Timer1: TTimer; Label1: TLabel; Label2: TLabel; procedure tsCap321Bitmap(Sender: TObject; Bitmap: TBitmap; msSinceFirstFrame: Cardinal); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin tscap321.Connected:=True; end; procedure TForm1.Timer1Timer(Sender: TObject); var testbmp: TBitmap; begin if tscap321.Connected=True then begin tscap321.CapOrder:=Grab; label1.Caption:='Grabbe'; // label2.caption:=''; end; end; procedure TForm1.tsCap321Bitmap(Sender: TObject; Bitmap: TBitmap; msSinceFirstFrame: Cardinal); begin image1.Picture.Bitmap:=Bitmap; image1.Repaint; label2.Caption:='Sende Bitmap'; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz