首页 > 编程 > C# > 正文

C#实现控制摄像头的类

2019-10-29 21:38:38
字体:
来源:转载
供稿:网友

这篇文章主要介绍了C#实现控制摄像头的类,涉及C#操作摄像头的初始化、抓图、录像等功能,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#实现控制摄像头的类。分享给大家供大家参考。具体如下:

 

 
  1. /// <summary> 
  2. /// 一个控制摄像头的类 
  3. /// </summary> 
  4. public class Pick 
  5. private const int WM_USER = 0x400; 
  6. private const int WS_CHILD = 0x40000000; 
  7. private const int WS_VISIBLE = 0x10000000; 
  8. private const int WM_CAP_START = WM_USER; 
  9. private const int WM_CAP_STOP = WM_CAP_START + 68; 
  10. private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10; 
  11. private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11; 
  12. private const int WM_CAP_SAVEDIB = WM_CAP_START + 25; 
  13. private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60; 
  14. private const int WM_CAP_SEQUENCE = WM_CAP_START + 62; 
  15. private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20; 
  16. private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63; 
  17. private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51; 
  18. private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50; 
  19. private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6; 
  20. private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2; 
  21. private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3; 
  22. private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5; 
  23. private const int WM_CAP_SET_SCALE = WM_CAP_START + 53; 
  24. private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52; 
  25. private IntPtr hWndC; 
  26. private bool bStat = false
  27. private IntPtr mControlPtr; 
  28. private int mWidth; 
  29. private int mHeight; 
  30. private int mLeft; 
  31. private int mTop; 
  32. /// <summary> 
  33. /// 初始化摄像头 
  34. /// </summary> 
  35. /// <param name="handle">控件的句柄</param> 
  36. /// <param name="left">开始显示的左边距</param> 
  37. /// <param name="top">开始显示的上边距</param> 
  38. /// <param name="width">要显示的宽度</param> 
  39. /// <param name="height">要显示的长度</param> 
  40. public Pick(IntPtr handle, int left, int top, int width, int height) 
  41. mControlPtr = handle; 
  42. mWidth = width; 
  43. mHeight = height; 
  44. mLeft = left; 
  45. mTop = top; 
  46. [DllImport("avicap32.dll")] 
  47. private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID); 
  48. [DllImport("avicap32.dll")] 
  49. private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize); 
  50. [DllImport("User32.dll")] 
  51. private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam); 
  52. /// <summary> 
  53. /// 开始显示图像 
  54. /// </summary> 
  55. public void Start() 
  56. if (bStat) 
  57. return
  58. bStat = true
  59. byte[] lpszName = new byte[100]; 
  60. hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0); 
  61. if (hWndC.ToInt32() != 0) 
  62. SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0); 
  63. SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0); 
  64. SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0); 
  65. SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); 
  66. SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0); 
  67. SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0); 
  68. SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0); 
  69. SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0); 
  70. return
  71. /// <summary> 
  72. /// 停止显示 
  73. /// </summary> 
  74. public void Stop() 
  75. SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); 
  76. bStat = false
  77. /// <summary> 
  78. /// 抓图 
  79. /// </summary> 
  80. /// <param name="path">要保存bmp文件的路径</param> 
  81. public void GrabImage(string path) 
  82. IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); 
  83. SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64()); 
  84. /// <summary> 
  85. /// 录像 
  86. /// </summary> 
  87. /// <param name="path">要保存avi文件的路径</param> 
  88. public void Kinescope(string path) 
  89. IntPtr hBmp = Marshal.StringToHGlobalAnsi(path); 
  90. SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64()); 
  91. SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0); 
  92. /// <summary> 
  93. /// 停止录像 
  94. /// </summary> 
  95. public void StopKinescope() 
  96. SendMessage(hWndC, WM_CAP_STOP, 0, 0); 

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表