AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild aus Webcam, bekomme ich Schwarz!
Thema durchsuchen
Ansicht
Themen-Optionen

Bild aus Webcam, bekomme ich Schwarz!

Ein Thema von taktaky · begonnen am 17. Sep 2007 · letzter Beitrag vom 4. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
taktaky
(Gast)

n/a Beiträge
 
#1

Bild aus Webcam, bekomme ich Schwarz!

  Alt 17. Sep 2007, 23:40
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:
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.DLLname '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.
Wo liegt das Problem? ich verwende Microsoft Webcam
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ß


-----------
Miniaturansicht angehängter Grafiken
webcam1_177.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 18. Sep 2007, 04:38
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 (http://pan.fotovista.com) und wohl du das Bild von deinem Webserver geloescht hast weil du es nicht mehr brauchst!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
taktaky
(Gast)

n/a Beiträge
 
#3

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 18. Sep 2007, 09:50
Salut,

was fehlt noch im Code? Gar nichts

Quelle : http://www.delphipraxis.net/internal...ighlight=video

Ich habe den Code noch einmal getestet (ohne Änderung). Ich bekomme nun Live Webcam !!!

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?



-------
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#4

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 18. Sep 2007, 14:54
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
Philipp F.
  Mit Zitat antworten Zitat
taktaky
(Gast)

n/a Beiträge
 
#5

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 18. Sep 2007, 23:22
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 :
http://www.delphipraxis.net/download.php?id=28979

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ß


-------
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#6

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 19. Sep 2007, 14:42
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:
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;
Ins Button1Click kommt dann
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^^
Philipp F.
  Mit Zitat antworten Zitat
taktaky
(Gast)

n/a Beiträge
 
#7

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 19. Sep 2007, 15:10
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 !!!




--------
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 19. Sep 2007, 15:12
Benenn die Variable mal um.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
taktaky
(Gast)

n/a Beiträge
 
#9

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 19. Sep 2007, 15:25
Zitat von DeddyH:
Benenn die Variable mal um.
welche Variable ?
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.DLLname '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.
  Mit Zitat antworten Zitat
Benutzerbild von Tormentor32
Tormentor32

Registriert seit: 27. Okt 2005
Ort: Düsseldorf
369 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Bild aus Webcam, bekomme ich Schwarz!

  Alt 19. Sep 2007, 15:26
Lege eine globale Variable an und setze diese für handle ein.

Zitat von Flips:
(handle bitte als Globale Variable vom Typ THandle deklarieren (ja ich weiß, ist nicht OOP ))
Richard Mahr
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
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