Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Webcam in Delphi? (https://www.delphipraxis.net/35689-webcam-delphi.html)

Nicolai1234 10. Dez 2004 19:07


Webcam in Delphi?
 
Ich würde gerne in meinem Programm ein livebild meiner Webcam anzeigen und bei Bedarf ein "Foto" schießen!
Der einzige hinweis, den ich hier in der DP gesehen habe ist das DS-Pack, allerdings lässt es sich bei mir nicht installieren (kann aber auch daran liegen, dass ich zu doof dazu bin. Wie muss ich das den Installieren?)!
Gibt es da noch eine Alternative zum DSPack? Am liebsten wäre mir auch eine Komponente, damit das ganze nicht zu kompliziert wird!
Vielen Dank
Nicolai

MiniKeks 10. Dez 2004 19:16

Re: Webcam in Delphi?
 
http://tscap32.sourceforge.net/

Sowas?

Ultimator 10. Dez 2004 19:17

Re: Webcam in Delphi?
 
Du brauchst das DSPack gar nicht.
Ich habs nach einer im Forum des SDC geposteten Lösung gemacht, und es funktioniert.

Delphi-Quellcode:
//Zuerst brauchst du folgende Konstanten
const
  WM_CAP_DRIVER_CONNECT = WM_USER + 10;
  WM_CAP_EDIT_COPY = WM_USER + 30;
  WM_CAP_SET_PREVIEW = WM_USER + 50;
  WM_CAP_SET_OVERLAY = WM_USER + 51;
  WM_CAP_SET_PREVIEWRATE = WM_USER + 52;

implementation

{$R *.dfm}

//Dann brauchst du noch das hier
function capCreateCaptureWindow(lpszWindowName: LPCSTR;
  dwStyle: DWORD;
  x, y,
  nWidth,
  nHeight: integer;
  hwndParent: HWND;
  nID: integer): HWND; stdcall;
  external 'AVICAP32.DLL' name 'capCreateCaptureWindowA';

procedure TForm1.LaberLaber; //halt irgendne Prozedur, ich habs im Formcreate, damit ich gleich was seh ^^
var handle:THandle;
begin
  handle := capCreateCaptureWindow('Video',ws_child+ws_visible, 0,
  0, 320, 240, Panel1.Handle, 1); //Wie du siehst, brauchst du ein Panel in diesem Beispiel ;-)
  SendMessage(handle, WM_CAP_DRIVER_CONNECT, 0, 0);
  SendMessage(handle, WM_CAP_SET_PREVIEWRATE, 30, 0);
  sendMessage(handle, WM_CAP_SET_OVERLAY, 1, 0);
  SendMessage(handle, wm_cap_set_preview, 1, 0);
end;

Getestet hab ich den Code mit meiner Eyetoy-Kamera mit modifizierten treibern, sollte aber mit jeder anderen Webcam auch funktionieren :-)

Nicolai1234 10. Dez 2004 19:19

Re: Webcam in Delphi?
 
Zitat:

Zitat von MiniKeks
http://tscap32.sourceforge.net/

Sowas?

Ja

@Ultimator:
Danke, aber muss man irgendwo noch die "Inputgröße" der Kamra einstellen?
Bleiben die Konstanten immer gleich oder muss ich die für meine Bedürfnisse ändern?
Wie mache ich damit ein Foto?

Ultimator 10. Dez 2004 19:31

Re: Webcam in Delphi?
 
Also, in dem Beitrag im o.g. Forum hat er noch den Code für ein Bildschirmfoto gepostet, aber den hab ich nicht getestet :mrgreen:

Delphi-Quellcode:
procedure TForm1.ButtonCamFoClick(Sender:TObkect);
begin
SendMessage( handle, WM_CAP_EDIT_COPY, 1, 0 );
Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
end;
Dan müsstest du halt die im oben genannten Code vereinbarte Variable handle global oder so machen, um darauf zugreifen zu können.

Joa, die Konstanten der Funktion capCreateCaptureWindow müssen gleich bleiben;
in diesem Codeblock
Delphi-Quellcode:
handle := capCreateCaptureWindow('Video',ws_child+ws_visible, 0, 0, 320, 240, Panel1.Handle, 1);
SendMessage(handle, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(handle, WM_CAP_SET_PREVIEWRATE, 30, 0);
sendMessage(handle, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(handle, wm_cap_set_preview, 1, 0);
kannst/darfst du lediglich das 'Video' in handle:= capCreateWindow(bla); ändern.
Die Konstanten WM_CAP_DRIVER_CONNECT, WM_CAP_SET_PREVIEWRATE, WM_CAP_SET_OVERLAY und wm_cap_set_preview müssen denke ich so bleiben. Kannst ja n bissl mit den Parametern rumspielen :mrgreen:

Das dürfte erstmal alles sein :-)

Nicolai1234 10. Dez 2004 21:20

Re: Webcam in Delphi?
 
Gibt es noch die Möglichkeit einen Weißabgleich und die Helligkeit manuell einzustellen?

Matze 10. Dez 2004 21:28

Re: Webcam in Delphi?
 
Vieleicht hilft dir auch noch dieser Thread

alcaeus 10. Dez 2004 21:29

Re: Webcam in Delphi?
 
Hi Ulti,

ich habe diesen Code ausprobiert:
Delphi-Quellcode:
procedure TForm1.ButtonCamFoClick(Sender:TObkect);
begin
SendMessage( handle, WM_CAP_EDIT_COPY, 1, 0 );
Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);
end;
und er funktioniert soweit auch gut :firejump:

Allerdings wird das Bild in die Zwischenablage kopiert, was ich definitiv verhindern möchte. Gibt es eine Möglichkeit dies zu umgehn bzw. den ursprünglichen Zustand des Clipboards zu sichern und anschließend wieder herzustellen?

Greetz
alcaeus

Nicolai1234 10. Dez 2004 21:37

Re: Webcam in Delphi?
 
Zitat:

Zitat von alcaeus
und er funktioniert soweit auch gut :firejump:

Bei mir nimmt er dieses GetAsHandle nicht! Was kann ich tun?

Ultimator 10. Dez 2004 21:52

Re: Webcam in Delphi?
 
@Nicolai: Hast du die Unit ClipBrd eingebunden?

@Den Rest :-)
Es gibt anscheinend auch die Möglichkeit, das ganze per API-Funktionen zu erledigen, anstatt per Messages.
Beispiel:
Delphi-Quellcode:
SendMessage( handle, WM_CAP_EDIT_COPY, 1, 0 ); //Das wäre jetzt per Message
capEditCopy(handle); //Müsste theoretisch auch gehen, macht das gleiche (erzählt mir zumindest das WinAPI-SDK :-)
Allerdings mosert da Delphi, dass capEditCopy ein undefinierter Bezeichner sei.
Weiß jemand, welche Unit da noch einzubinden ist? :gruebel:
Dann müsste man nämlich nicht diese ganzen Konstanten oben definieren, von denen ich nicht weiß, wie sie zustande kommen :-?

Zum Thema Bild in die Zwischenablage hab ich hier noch ein paar messages gefunden:
WM_CAP_FILE_SAVEDIB ("The WM_CAP_FILE_SAVEDIB message copies the current frame to a DIB file.")
WM_CAP_FILE_SAVEAS ("The WM_CAP_FILE_SAVEAS message copies the contents of the capture file to another file.")
WM_CAP_FILE_SET_CAPTURE_FILE ("The WM_CAP_FILE_SET_CAPTURE_FILE message names the file used for video capture.")
WM_CAP_FILE_ALLOCATE ("The WM_CAP_FILE_ALLOCATE message creates (preallocates) a capture file of a specified size.")


Und nun noch zum Thema Benutzereinstellungen wegen Kostrast und so:
WM_CAP_DLG_VIDEODISPLAY ("The WM_CAP_DLG_VIDEODISPLAY message displays a dialog box in which the user can set or adjust the video output. This dialog box might contain controls that affect the hue, contrast, and brightness of the displayed image, as well as key color alignment.")

Und bei jeder dieser Messages steht hinter dem kurzen Beschreibungstext " You can send this message explicitly or by using the [Messagename ohne Unterstriche und vorangestelltes WM] macro."

So, ich hoffe, ich konnte einigermaßen helfen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 1 von 6  1 23     Letzte »    

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