Seite 1 von 1

Bild aus Videoquelle speichern

Verfasst: 24.08.2005 11:16
von EHanke
Hallo,
ich weiß einfach nicht mehr weiter.
Habe folgendes Problem. Ich will ein Programm, das mir aus einer festgelegten Videoquelle (in meinem Falle eine Webcam) ein Bild (Format egal) generiert. Keine Fenster, keine Buttons.
Ich habe einen Haufen Informationen gefunden. Ich bekomme es auch hin, das Livebild auf dem Bildschirm anzuzeigen. Das habe ich auch schon in eine Datei speichern können. Aber nur mit Hilfe der Zwischenablage.
Und deren Inhalt darf leider nicht beeinträchtigt werden.

Hat da jemand einen 5Zeiler oder einen Rat für mich? Egal, ob mit Hilfe der avicap lib oder avicap32.dll

Danke
Eric

Verfasst: 24.08.2005 12:08
von stbi

Verfasst: 24.08.2005 13:26
von EHanke
Danke. Aber den Beitrag kannte ich schon. Auf dem basiert auch einer meiner Versuche. Das Livevideo anzuzeigen geht ohne Probleme, nur das zu speichern bekomme ich einfach nicht auf die Reihe. Und das muß halt ohne die Zwischenablage gehen.

Verfasst: 24.08.2005 15:55
von stbi
es gibt auch noch so nette Funktionen wie WM_CAP_GRAB_FRAME_NOSTOP, die ein Bild in einen Buffer schreibt, näheres bei Microsoft, einfach googeln, da kommt jede Menge Info

Verfasst: 24.08.2005 19:45
von EHanke
Danke. Das klingt wirklich gut. Nur bin ich in PB garnicht gut. Für viele andere Sprachen findet man ja wenigstens einige Sources wo man abkucken kann. Kann mir einer dabei helfen, das zu realisieren???
Das ist doch sicher nur eine Zeile die ich in das Programm einbauen muß. Nur waren meine letzen 3 Stunden da leider nicht sehr produktiv. :)
Unten ist das, was ich bis jetzt habe. Ist ebenfalls hier aus dem Forum.
Nur brauche ich das Vorschaufenster nicht und es soll wie gesagt ohne die Zwischenablage gehen.
Habt bitte erbarmen und helft mir da bitte irgendwie weiter. Bin an einem Totpunkt angekommen.

Danke
Eric

#WM_CAP_START = #WM_USER

#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7

#WM_CAP_DRIVER_CONNECT = #WM_USER + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_USER + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14

#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43

#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_GET_STATUS = #WM_CAP_START + 54

#WM_CAP_FILE_SAVEDIB = #WM_USER + 25
#WM_CAP_SET_SCALE = #WM_USER + 53

#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85

hWnd = OpenWindow(0, 0, 0, 400, 400, #PB_Window_SystemMenu, "WebCamTest")

CreateGadgetList(WindowID())

If OpenLibrary(0, "AVICAP32.DLL")

hWebcam = CallFunction(0, "capCreateCaptureWindowA", "", #WS_VISIBLE + #WS_CHILD, 10, 10, 380, 380, hwnd, 0)

SendMessage_(hWebcam, #WM_CAP_DRIVER_CONNECT , 0 , 0)
SendMessage_(hWebcam, #WM_CAP_SET_SCALE , 1 , 0)
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEWRATE , 1 , 0)
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW , 1 , 0)
SendMessage_(hwebcam, #WM_CAP_FILE_SAVEDIB , 1 , 0)

Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
SendMessage_(hWebcam, #WM_CAP_SET_PREVIEW , 0, 0)
SendMessage_(hWebcam, #WM_CAP_DRIVER_DISCONNECT, "BLUBBER", 0)
CloseWindow(0)
CloseLibrary(0)
EndIf
End
; ExecutableFormat=Windows
; EOF

Verfasst: 25.08.2005 13:28
von stbi
schick mal ein

Code: Alles auswählen

SendMessage_(hwebcam, #WM_CAP_COPY_EDIT ,0 , 0) 
das sollte in der Theorie (in der Praxis gerade keine Webcam angeschlossen...) ein Bild in die Zwischenablage speichern (BMP-Format!).

Kannst Du dann mit

Code: Alles auswählen

CreateImage(0, 1024,768) 
If StartDrawing(ImageOutput()) 
  hbm = GetClipboardData(#PB_ClipboardImage) 
  If hbm
    DrawImage(hbm,0,0,1024,768) 
    StopDrawing() 
    SaveImage(0, "C:\test.bmp") 
    Debug "gespeichert"
  Else
    Debug "nix im Clipboard"
  EndIf
EndIf

aus dem Clipboard holen und weiterverwursten. Im Beispiel speichere ich es als BMP-Datei ab.

Nur mal Quick und Dirty, probiers mal aus!

Verfasst: 25.08.2005 20:10
von EHanke
Hallo stbi,
danke, aber das ging leider auch nicht. Es kommt einfach nichts in der Zwischenablage an. Kann das mal jemand anderes ausprobieren? Nicht das mein Computer einfach nur eine Abneigung gegen mich hat.
Andererseits hab ich das jetzt auch schon auf einem W2K versucht. Das selbe Ergebnis.
Hat jemand das mit der AVICAP Library schonmal gemacht? Vielleicht ist die ja etwas kooperativer.

Gruß
Eric