THe GUI shown here allows you to save a new image whenever you click a button, which works well if you are creating Aardman-type plasticine animations. This is easily changed to 'after a preset time' if you want to create time-lapse. A nice one is to point your webcam out the window and capture the daylight view every 15 minutes of daylight...
This image was assembled from a series of stills, using v4w_e.bas and LBCam.dll. Thanks to snoopy11, Alyce Watson, Stefan Pendl and others. And Carl Gundel, author of LB!
Note, the version given here does not delete the individual images. I usually run it so it saves to RAMdisk, which is emptied automatically whaen I close down. Easily changed. I should also really change weach stored 'still' to a gif, since storing as bmp's is wildly extravagant on space. Another easy change..
' *************************************************************************** ' v4w_e.bas JohnF tenochtitlanuk Nov 13 2011 ' *************************************************************************** ' Display live webcam in lefthand; on demand copy to righthand.. ' On demand, create a gif animation of the saved frames... ' ... and display in web browser. nomainwin UpperLeftX = 20 UpperLeftY = 20 WindowWidth = 850 WindowHeight = 360 graphicbox #main.gb1, 40, 60, 320, 210 graphicbox #main.gb3, 460, 40, 350, 250 button #main.b0, "Quit", [quit], LR, 430, 70 button #main.b1, ">--Save-->", [SaveStatic], LR, 452, 150 button #main.b2, "Animate", [Animate], LR, 437, 115 groupbox #main.gb, "Webcam views", 25, 10, 810, 295 struct Rect, leftX as long, upperY as long, rightX as long, lowerY as long open "LBCam.dll" for dll as #webcam open "v4w Webcam sequence capture software" for window_nf as #main #main "trapclose [quit]" open "atl" for dll as #atl calldll #atl, "AtlAxWinInit", Ret as void hBox = hWnd( #main.gb3) hMain = hWnd( #main) edition = 1 calldll #user32, "GetWindowLongA", hBox as ulong, _GWL_HINSTANCE as ulong, hInst as ulong calldll #user32, "GetClientRect", hMain as ulong, Rect as struct, r as ulong cw = Rect.rightX.struct ch = Rect.lowerY.struct #main.gb1 "place 1 1 ; color black ; size 4 ; down ; boxfilled 320 210 ; flush" #main.gb3 "down ; fill black ; color red ; backcolor black ; flush" left = 40 'x coordinate inside main window of camera live display top = 60 'y coordinate inside main window right = 320 'size of cam window bottom = 210 'size of cam window calldll #webcam, "CameraConnect", hMain as ulong, left as long, top as long, right as long, bottom as long, hRet as ulong calldll #webcam, "CameraShow", hRet as ulong, result as void wait [SaveStatic] #main.gb1 "getbmp scr 0 0 319 209" #main.gb3 "drawbmp scr 14 15" #main.gb3 "flush" #main.gb3 "getbmp scr 0 0 349 249" name$ ="Screen" +str$( edition) +".bmp" bmpsave "scr", name$ edition =edition +1 #main.gb3 "place 90 242" #main.gb3 "\"; time$(); " "; name$ unloadbmp "scr" wait [Animate] im$ ="" for j =1 to edition im$ =im$ +"Screen" +str$( j) +".bmp " next j command$ ="convert -delay 100 -dispose None "; im$; " -loop 0 timelapse.gif" call RunWait "cmd.exe", "/c "; command$, "" address$ ="TimeLapse.html" run "explorer.exe "; address$ goto [quit] sub IM command$, delay run "cmd.exe /c "; chr$( 34); command$; chr$( 34), HIDE calldll #kernel32, "Sleep", delay as long, re as void end sub sub RunWait file$, para$, dir$ ' sub to open an application or file ' ' Usage: ' call RunWait {filename}, {parameters}, {startfolder} ' ' filename ...... full path to file or executable ' parameters .... if file is a document this should be empty ' if file is an executable any parameters ' that should be passed to it ' startfolder ... initial folder, can be empty SEE.MASK.NOCLOSEPROCESS = hexdec("40") SEE.MASK.FLAG.DDEWAIT = hexdec("100") ' http://msdn.microsoft.com/en-us/library/bb759784(VS.85).aspx struct ExecInfo, _ Size as ulong, _ fMask as ulong, _ hwnd as ulong, _ Verb$ as ptr, _ File$ as ptr, _ Parameters$ as ptr, _ Directory$ as ptr, _ Show as long, _ InstApp as ulong, _ IDList as ulong, _ Class$ as ptr, _ keyClass as ulong, _ HotKey as ulong, _ Icon as ulong, _ Process as ulong ExecInfo.fMask.struct = SEE.MASK.NOCLOSEPROCESS or SEE.MASK.FLAG.DDEWAIT ExecInfo.File$.struct = file$ + chr$(0) ExecInfo.Parameters$.struct = para$ + chr$(0) ExecInfo.Directory$.struct = dir$ + chr$(0) ExecInfo.Show.struct = _SW_SHOWNORMAL ExecInfo.Size.struct = len(ExecInfo.struct) ' http://msdn.microsoft.com/en-us/library/bb762154(VS.85).aspx calldll #shell32, "ShellExecuteExA", _ ExecInfo as struct, _ result as long if result then Handle = ExecInfo.Process.struct Milliseconds = _INFINITE ' http://msdn.microsoft.com/en-us/library/ms687032(VS.85).aspx calldll #kernel32, "WaitForSingleObject", _ Handle as ulong, _ Milliseconds as ulong, _ result as ulong end if end sub [quit] calldll #webcam, "CameraOff", hRet as ulong, result as void close #main close #webcam close #atl end