Hi All
I need to Capture Webcam Images at regular intervals and save them to disc,i am developing a window based application using Visual studio 2003 and Dotnet Framework 1.1 ,
i really have no idea of how to do it, i welcome all with their valuable suggestions
Thanks

WebCam Capturing
SoulSolutions
"i have highlighted the portion of the code which is not working, please suggest me how to fix it "
Can you explain what problem you are facing on the specified portion of code. Is it raising any exception or just halts
Best Regards,
Rizwan
Leo12
siavoshkc
http://www.timvw.be/windows-multimedia-video-capture/
http://www.timvw.be/windows-image-acquisition/ (runs slooow on my computer)
Rob Thomson
Create it in the code like this:
dim msImageObj as new SaveFileDialog
Best Regards,
sunrunner
the problem is that the source code i downloaded from the link is not working ,
suggest !
zubair
Matt Lin
Hey Zubair,
You can try using Windows Image Acquisition (WIA). Its an API included in windows which gets images from devices like scanners and cameras. Check out this Coding4Fun article by Scott Hanselman: Look At Me! Windows Image Acquisition. Also check out this CodeProject article: WebCam Fast Image Capture Service using WIA. You can also use DirectX's component called DirectShow.
Cheers,
Ashish
FinallyInSeattle
zubair
I.HJ
C# Webcam Capture: This will return a System.Drawing.Image every x milliseconds: http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp txtCodeId=1339&lngWId=10
Regards,
Ashish
Jarod.Net
The code follows
Const WM_CAP As Short = &H400S
Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP + 10
Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP + 11
Const WM_CAP_EDIT_COPY As Integer = WM_CAP + 30
Const WM_CAP_SET_PREVIEW As Integer = WM_CAP + 50
Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP + 52
Const WM_CAP_SET_SCALE As Integer = WM_CAP + 53
Const WS_CHILD As Integer = &H40000000
Const WS_VISIBLE As Integer = &H10000000
Const SWP_NOMOVE As Short = &H2S
Const SWP_NOSIZE As Short = 1
Const SWP_NOZORDER As Short = &H4S
Const HWND_BOTTOM As Short = 1
Dim iDevice As Integer = 0 ' Normal device ID
Dim hHwnd As Integer ' Handle value to preview window
' Declare function from AVI capture DLL.
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, _
ByVal lParam As Object) As Integer
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Integer, _
ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _
ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer
Declare Function DestroyWindow Lib "user32" (ByVal hndw As Integer) As Boolean
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" _
(ByVal lpszWindowName As String, ByVal dwStyle As Integer, _
ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
ByVal nHeight As Short, ByVal hWndParent As Integer, _
ByVal nID As Integer) As Integer
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" (ByVal wDriver As Short, _
ByVal lpszName As String, ByVal cbName As Integer, ByVal lpszVer As String, _
ByVal cbVer As Integer) As Boolean
' Connect to the device.
Private Sub LoadDeviceList()
Dim strName As String = Space(100)
Dim strVer As String = Space(100)
Dim bReturn As Boolean
Dim x As Integer = 0
' Load name of all avialable devices into the lstDevices .
Do
' Get Driver name and version
bReturn = capGetDriverDescriptionA(x, strName, 100, strVer, 100)
' If there was a device add device name to the list
If bReturn Then lstDevices.Items.Add(strName.Trim)
x += 1
Loop Until bReturn = False
End Sub
' To display the output from a video capture device, you need to create a capture window.
Private Sub OpenPreviewWindow()
Dim iHeight As Integer = picCapture.Height
Dim iWidth As Integer = picCapture.Width
' Open Preview window in picturebox .
' Create a child window with capCreateCaptureWindowA so you can display it in a picturebox.
hHwnd = capCreateCaptureWindowA(iDevice, WS_VISIBLE Or WS_CHILD, 0, 0, 640, _
480, picCapture.Handle.ToInt32, 0)
' Connect to device
If SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) Then
' Set the preview scale
SendMessage(hHwnd, WM_CAP_SET_SCALE, True, 0)
' Set the preview rate in milliseconds
SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0)
' Start previewing the image from the camera
SendMessage(hHwnd, WM_CAP_SET_PREVIEW, True, 0)
' Resize window to fit in picturebox
SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, picCapture.Width, picCapture.Height, _
SWP_NOMOVE Or SWP_NOZORDER)
btnsave.Enabled = True
btnStop.Enabled = True
btnstart.Enabled = False
Else
' Error connecting to device close window
DestroyWindow(hHwnd)
btnsave.Enabled = False
End If
End Sub
' Use SendMessage to copy the data to the clipboard Then transfer the image to the picture box.
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click
Dim data As IDataObject
Dim bmap As Image
' Copy image to clipboard
SendMessage(hHwnd, WM_CAP_EDIT_COPY, 0, 0)
' Get image from clipboard and convert it to a bitmap
data = Clipboard.GetDataObject()
If data.GetDataPresent(GetType(System.Drawing.Bitmap)) Then
bmap = CType(data.GetData(GetType(System.Drawing.Bitmap)), Image)
picCapture.Image = bmap
ClosePreviewWindow()
btnsave.Enabled = False
btnStop.Enabled = False
btnstart.Enabled = True
// sfdImage is not defined any where .........
If sfdImage.ShowDialog = DialogResult.OK Then
bmap.Save(sfdImage.FileName, Imaging.ImageFormat.Bmp)
End If
End If
End Sub
' Finally, to close the preview window, disconnect from the device and destroy the preview window.
Private Sub ClosePreviewWindow()
' Disconnect from device
SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0)
' close window
DestroyWindow(hHwnd)
End Sub
Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
ClosePreviewWindow()
End Sub
Private Sub btnstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnstart.Click
LoadDeviceList()
OpenPreviewWindow()
End Sub
i welcome all advices
thanks
davidjmsdn
Can anyone help me please. I have applied the same source code. It does work well with 1 webcam connected in my computer but if I have 2 webcam. I can only use 1 at a time. After the second run, program will automatically detect the last used camera for me. You cannot fix which camera you will use. Only if you open the same program while another one is running it will ask you to select Capture source so you can select second camera.
Does anyone know how to work around with this displaying Capture source Do you have any command to list all camera device that connect to your computer and select which one to use by your self
I am also a newbie but got an assignment on this. So if you khow how to do it, i would be very please to thank you...
dandrievsky
A More independant way is P/Invoke without WIA and DirectShow:
http://www.windowsformsdatagridhelp.com/default.aspx ID=458a6b78-eacc-48b9-9036-e5cf2ebb86b6
This code is in VB and can be converted to C# with a little effort and time! I think this will work for Windows 2000 and above!
Best Regards,
Rizwan