![]() |
Bild aus Webcam, bekomme ich Schwarz!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
endlich habe ich einen Code, der ein Bild aus Webcam auf Form holt, gefunden. ich weiß nicht, warum das Bild beim Capture schwarz erhalte!
Delphi-Quellcode:
Wo liegt das Problem? ich verwende Microsoft Webcam
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; 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} function capCreateCaptureWindow(lpszWindowName: LPCSTR; dwStyle: DWORD; x, y, nWidth, nHeight: integer; hwndParent: HWND; nID: integer): HWND; stdcall; external 'AVICAP32.DLL' name 'capCreateCaptureWindowA'; procedure TForm1.Button1Click(Sender: TObject); 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; end. end. so sieht es aus, wenn ich auf das Button anklicke: (sehe Anhang) Ich möchte nur ein Bild holen und nicht Live Kamera auf das Form. Gruß ----------- |
Re: Bild aus Webcam, bekomme ich Schwarz!
1. Weis ich nicht warum bei dir dieses Fenster angezeigt wird denn der Code dafuer ist ja eindeutig nicht in deinem Code zu sehen, wahrscheinlich ist das auch wieder nur der halber Code von irgendjemand und nicht von dir,
2. Bei mir funzt der Code einwandfrei! 3. Warum haengst du diese Bilder nicht an damit sie auch noch da sind nachdem Fotovista ( ![]() |
Re: Bild aus Webcam, bekomme ich Schwarz!
Salut,
was fehlt noch im Code? Gar nichts Quelle : ![]() Ich habe den Code noch einmal getestet (ohne Änderung). Ich bekomme nun Live Webcam :drunken: !!! Der Code funktioniert vielleicht nur, wenn die Webcam nicht an ist. Ich möchte aber nur ein Bild holen und nicht das Video. Oder muss ich noch einen Code dazu schreiben, um den Bereich von dem Video zu kopieren? ------- |
Re: Bild aus Webcam, bekomme ich Schwarz!
Delphi-Quellcode:
uses clpbrd; //oder so...
//... procedure TForm1.Button1Click(Sender: TObject); 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); //Bild in Zwischenablage kopieren SendMessage(handle, WM_CAP_EDIT_COPY, 1, 0 ); Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0); end; Ungetestet |
Re: Bild aus Webcam, bekomme ich Schwarz!
Hi,
doch, es funktioniert. Danke! Noch ein kleines Problem, es wird nur einmal ein Bild abgeholt d.h. wenn ich noch einmal auf das Button klicke um das Bild zu aktualisieren, dann passiert leider nichts. Es Wird stattdessen ein Fenster angezeigt : ![]() Was ich aber bemerkt habe, man kann ein Bild von der Kamera abholen, nur wenn die Kamera nicht läuft. Wenn aber die Kamera gerade läuft, dann geht es nicht!!! Deswegen klappt nur einmal am Anfang, da die Kamera noch nicht läuft. Die Qualität von dem Bild ist aber nicht gut (die Farbe rot dominiert!!!) Gruß ------- |
Re: Bild aus Webcam, bekomme ich Schwarz!
Gut, ich hab das jetzt ein wenig falsch gemacht...
Dieser Teil kommt ins FormCreate (handle bitte als Globale Variable vom Typ THandle deklarieren (ja ich weiß, ist nicht OOP :? ))
Delphi-Quellcode:
Ins Button1Click kommt dann
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); //Das sollte das Problem mit der roten Farbe lösen Image1.Picture.Bitmap.Pixelformat := pf24Bit;
Delphi-Quellcode:
//Bild in Zwischenablage kopieren
SendMessage(handle, WM_CAP_EDIT_COPY, 1, 0 ); Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0); Auch ungetestet^^ |
Re: Bild aus Webcam, bekomme ich Schwarz!
Wenn ich den Teil in Bereich OnCreate, bekomme ich diese Meldung :
Cannot assign to a read-only property Wenn ich aber den Teil nicht dort anlege, dann erscheint zwar keine Meldung, bekomme ich aber kein Bild ! Das Bild wird ja in die Zwischenablage kopiert. Wenn ich das Bild in eine andere Anwendung einfüge, das sehe ich das Bild ist immer mehr rot !!! -------- |
Re: Bild aus Webcam, bekomme ich Schwarz!
Benenn die Variable mal um.
|
Re: Bild aus Webcam, bekomme ich Schwarz!
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, clipbrd; type TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; 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} function capCreateCaptureWindow(lpszWindowName: LPCSTR; dwStyle: DWORD; x, y, nWidth, nHeight: integer; hwndParent: HWND; nID: integer): HWND; stdcall; external 'AVICAP32.DLL' name 'capCreateCaptureWindowA'; procedure TForm1.FormCreate(Sender: TObject); 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); //Das sollte das Problem mit der roten Farbe lösen Image1.Picture.Bitmap.Pixelformat := pf24Bit; end; procedure TForm1.Button1Click(Sender: TObject); begin //Bild in Zwischenablage kopieren SendMessage(handle, WM_CAP_EDIT_COPY, 1, 0 ); Image1.Picture.Bitmap.LoadFromClipboardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0); end; end. |
Re: Bild aus Webcam, bekomme ich Schwarz!
Lege eine globale Variable an und setze diese für handle ein.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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