Ido Samuelson

Notes, thoughts and exceptions

<September 2008>
SuMoTuWeThFrSa
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011


Navigation

Blogs I read

Articles

My WorkSpaces

Subscriptions

News

Only 10 kind of people in the world. Those who understand binary and those who don't.

Post Categories

Article Categories



Hardware Wrapping

Hardware Wrapping
WebCamera #2
The WebCamera class make use of an API32 Wrapper Class which contains all the API calls and constants.
 
 
WARNING: You MUST keep the instance, otherwise it will be GC and the API32 calls will fail to callback)
 
How to use syntax:
 
Decleration and instance of WebCamera.

WebCamera wc = new WebCamera(this.Handle, this.Width, this.Height);


Handle the ReceivedFrame Event

wc.RecievedFrame+=new WebCamera.RecievedFrameEventHandler(wc_RecievedFrame);

void wc_RecievedFrame(object o , WebCameraEventArgs e)

{

     //throw new NotImplementedException();

}


 
API32 Wrapper Class
 
using System.Runtime.InteropServices;
 
public class API32
{
     // API32 calls
     [DllImport("avicap32.dll")] public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
     [DllImport("avicap32.dll")] public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);
     [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
     [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);
     [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam);
     [DllImport("User32.dll")] public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref BITMAPINFO lParam);
     [DllImport("User32.dll")] public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
     [DllImport("avicap32.dll")]public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize );
 
     // Constants
     public const int WM_USER = 0x400;
     public const int WS_CHILD = 0x40000000;
     public const int WS_VISIBLE = 0x10000000;
     public const int SWP_NOMOVE = 0x2;
     public const int SWP_NOZORDER = 0x4;
     public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;
     public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11;
     public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5;
     public const int WM_CAP_SET_PREVIEW = WM_USER + 50;
     public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
     public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;
    
     // Structures
     [StructLayout(LayoutKind.Sequential)] public struct VIDEOHDR
     {
          [MarshalAs(UnmanagedType.I4)] public int lpData;
          [MarshalAs(UnmanagedType.I4)] public int dwBufferLength;
          [MarshalAs(UnmanagedType.I4)] public int dwBytesUsed;
          [MarshalAs(UnmanagedType.I4)] public int dwTimeCaptured;
          [MarshalAs(UnmanagedType.I4)] public int dwUser;
          [MarshalAs(UnmanagedType.I4)] public int dwFlags;
          [MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public int[] dwReserved;
     }
 
     [StructLayout(LayoutKind.Sequential)] public struct BITMAPINFOHEADER
     {
          [MarshalAs(UnmanagedType.I4)] public Int32 biSize ;
          [MarshalAs(UnmanagedType.I4)] public Int32 biWidth ;
          [MarshalAs(UnmanagedType.I4)] public Int32 biHeight ;
          [MarshalAs(UnmanagedType.I2)] public short biPlanes;
          [MarshalAs(UnmanagedType.I2)] public short biBitCount ;
          [MarshalAs(UnmanagedType.I4)] public Int32 biCompression;
          [MarshalAs(UnmanagedType.I4)] public Int32 biSizeImage;
          [MarshalAs(UnmanagedType.I4)] public Int32 biXPelsPerMeter;
          [MarshalAs(UnmanagedType.I4)] public Int32 biYPelsPerMeter;
          [MarshalAs(UnmanagedType.I4)] public Int32 biClrUsed;
          [MarshalAs(UnmanagedType.I4)] public Int32 biClrImportant;
     } 
 
     [StructLayout(LayoutKind.Sequential)] public struct BITMAPINFO
     {
          [MarshalAs(UnmanagedType.Struct, SizeConst=40)] public BITMAPINFOHEADER bmiHeader;
          [MarshalAs(UnmanagedType.ByValArray, SizeConst=1024)] public Int32[] bmiColors;
     }