Webcam

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Webcam

Beitrag von KatSeiko »

Es ist lange her, dass ich PureBasic nutzen konnte. Ich blicke im Beispiel (siehe hier) nicht durch.. Ich brauche nicht viel, nur ein einziges "Foto"..

Kann mir jemand darauf basierend eine Procedure (bitte mit ausfuehrlicher Kommentierung) schreiben, die mir ein Bild als Image aufnimmt und mir die ID des Bildes (als return) wiedergibt? Mit der groessten unterstuetzten Aufnahmegroesse..

Beispiel:

Code: Alles auswählen

WebcamImage = CaptureImageFromWebcam()
Height = ImageHeight(WebcamImage)
Width = ImageWidth(WebcamImage)
OpenWindow(#PB_Any, 0, 0, Height, Width, "Image", #PB_Window_Borderless|PB_Window_ScreenCentered)
ImageGadget(#PB_Any, 0, 0, Height, Width, WebcamImage)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Das Ganze wuerde dann ungefaehr so aussehen:

Bild
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: Webcam

Beitrag von Kukulkan »

Hallo,

hast Du in der Forensuche mal nach "Webcam" gesucht? Da findest Du haufenweise Beispiele zur Aufnahme von Bildern über API, über's Clipboard etc. Da muss doch was dabei sein...

Wenn nicht, dann such im englischen Forum, dort hat es mindestens 20 Beispiele für den Zugriff auf Webcams.

Kukulkan
Dark
Beiträge: 93
Registriert: 24.08.2007 20:36
Kontaktdaten:

Re: Webcam

Beitrag von Dark »

Hi,

um die größt mögliche Auflösung zu nutzen solltest du aber am besten DirectShow nutzen. Bei Video For Windows (VFW), was die meisten hier im Forum nutzen, kann man weder das Format, die Auflösung, noch welche Webcam als Quelle dient durch Programmierung ändern, sondern kann dem Benutzer lediglich einen Systemdialog anzeigen in dem das geändert werden kann.
VFW stellt außerdem nicht immer die maximale Auflösung zur Verfügung. Eine meiner Webcams hat die Auflösung 1280x720, unterstützt über VFW aber nur 640x480 als maximale Auflösung.
DirectShow hat dafür den Nachteil, das es viel schwieriger zu benutzen ist.
Ich würde aber an deiner Stelle das ganze auch nicht in eine Prozedur packen, da so eine Webcam auch mal 2 - 3 Sekunden für die Initialisierung braucht und dein Programm in dieser Zeit hängen würde. Ein eigener Thread mit Callback wäre aus meiner Sicht die bessere Lösung.
Du könntest aber auch ein anderes Programm wie FFmpeg nutzen, welches du mit passenden Parametern anweist einen Frame aufzunehmen und nach stdout zu schreiben. Dann müsstest du nur den Programm Output einlesen und hast dein Bild. (FFmpeg ist in dem Falle aber auch nicht die beste Lösung, da es bisher kein DirectShow unterstützt.)

mfg,
Dark
Antworten