WebCam Capturing

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



Answer this question

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

    sdfimage is not defined any where, the applications fails to compile .



  • siavoshkc

    Here are links to code that does work...

    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

    Thanks for getting back

    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

    yeh it worked, thanks in deed

    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

    i am using the following code snippet, there is problem in saving the image , i have highlighted the portion of the code which is not working, please suggest me how to fix it

    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



  • WebCam Capturing