Bild aus Videoquelle speichern

Anfängerfragen zum Programmieren mit PureBasic.
EHanke
Beiträge: 4
Registriert: 24.08.2005 11:08

Bild aus Videoquelle speichern

Beitrag 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
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
EHanke
Beiträge: 4
Registriert: 24.08.2005 11:08

Beitrag 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.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
EHanke
Beiträge: 4
Registriert: 24.08.2005 11:08

Beitrag 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
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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!
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
EHanke
Beiträge: 4
Registriert: 24.08.2005 11:08

Beitrag 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
Antworten