CameraConfig.cs
上传用户:chengzheng
上传日期:2013-08-05
资源大小:38k
文件大小:6k
源码类别:

Windows Mobile

开发平台:

C#

  1. using System;
  2. using System.Text;
  3. using OpenNETCF.Runtime.InteropServices;
  4. namespace Cowburn.Imaging
  5. {
  6. #region Enums
  7. /// <summary>
  8. /// Describes the capture of the camera. 
  9. /// </summary>
  10. public enum CaptureMode : int
  11. {
  12. /// <summary>
  13. /// Capture still images.
  14. /// </summary>
  15. Image = 0,
  16. /// <summary>
  17. /// Record a short video clip.
  18. /// </summary>
  19. Video = 1,
  20. }
  21. /// <summary>
  22. /// Describes the format of the capture file.
  23. /// </summary>
  24. public enum FileType : int
  25. {
  26. /// <summary>
  27. /// Capture images to the JPEG format.
  28. /// </summary>
  29. JPEG = 2, 
  30. /// <summary>
  31. /// Capture video to the AVI format.
  32. /// </summary>
  33. AVI = 8,
  34. }
  35. /// <summary>
  36. /// Describes what will be returned from the camera
  37. /// following successfult capture.
  38. /// </summary>
  39. public enum CaptureType : int
  40. {
  41. /// <summary>
  42. /// A path to a capture will be returned following 
  43. /// successful capture.
  44. /// </summary>
  45. File = 0,
  46. /// <summary>
  47. /// A byte array containing the image data will be
  48. /// returned following successful capture. 
  49. /// </summary>
  50. Data = 1,
  51. }
  52. /// <summary>
  53. /// Describes the orientation of the image.
  54. /// </summary>
  55. public enum Orientation 
  56. {
  57. /// <summary>
  58. /// The image will be displayed in landscape mode. 
  59. /// </summary>
  60. Landscape = 0, 
  61. /// <summary>
  62. /// The image will be displayed in portrait mode. 
  63. /// </summary>
  64. Portrait = 1,
  65. }
  66. /// <summary>
  67. /// Describes the image or video resolution. 
  68. /// </summary>
  69. public enum Resolution : int
  70. {
  71. /// <summary>
  72. /// The image resolution will be QQCIF (88x72).
  73. /// </summary>
  74. QQCIF = 0x00000001,
  75. /// <summary>
  76. /// The image resolution will be 128x96.
  77. /// </summary>
  78. _128x96 = 0x00000002,
  79. /// <summary>
  80. /// The image resolution will be QQVGA (160x120). Supported by Smartphone.
  81. /// </summary>
  82. QQVGA = 0x00000004,
  83. /// <summary>
  84. /// The image resolution will be QCIF (176x144). Supported by Smartphone.
  85. /// </summary>
  86. QCIF = 0x00000008,
  87. /// <summary>
  88. /// The image resolution will be QVGA (320x240). Supported by Smartphone.
  89. /// </summary>
  90. QVGA = 0x00000010,
  91. /// <summary>
  92. /// The image resolution will be CIF (352x288). Supported by Smartphone.
  93. /// </summary>
  94. CIF = 0x00000020,
  95. /// <summary>
  96. /// The image resolution will be VGA (640x480). Supported by Smartphone.
  97. /// </summary>
  98. VGA = 0x00000040,
  99. }
  100. #endregion
  101. internal sealed class CameraConfiguration : IDisposable
  102. {
  103. // This is a pointer to a block of unmanaged memory 
  104. // which we will use to create a struct containing the 
  105. // configuration data for the camera to use during
  106. // image/video capture.
  107. internal IntPtr _ptr = IntPtr.Zero;
  108. /// <summary>
  109. /// Creates an instance of CameraConfiguration and 
  110. /// registers an instance of a MessageWindow-derived
  111. /// class as the callback window.
  112. /// </summary>
  113. /// <param name="hCallbackWnd">A handle to a callback window derived from MessageWindow.</param>
  114. public CameraConfiguration(IntPtr hCallbackWnd) :  this()
  115. {
  116. // Define the default configuration for the camera.
  117. // This is a landscape, JPEG still image at 640x480
  118. // and captured to a file.
  119. this.hWndCallback = hCallbackWnd;
  120. this.CaptureMode = CaptureMode.Image;
  121. this.FileType = FileType.JPEG;
  122. this.Orientation = Orientation.Landscape;
  123. this.Resolution = Resolution.VGA;
  124. this.VideoSize = 0;
  125. this.SaveFolder = string.Empty;
  126. this.CaptureType = CaptureType.File;
  127. }
  128. internal CameraConfiguration()
  129. {
  130. // Allocate 548 bytes of unmanaged memory for 
  131. // our struct
  132. _ptr = MarshalEx.AllocHGlobal(548);
  133. }
  134. #region Properties
  135. /// <summary>
  136. /// Get/Set the handle to the callback window.
  137. /// </summary>
  138. public IntPtr hWndCallback
  139. {
  140. get { return MarshalEx.ReadIntPtr(_ptr, 0); }
  141. set { MarshalEx.WriteIntPtr(_ptr, 0, value); }
  142. }
  143. /// <summary>
  144. /// Get/Set the CaptureMode.
  145. /// </summary>
  146. public CaptureMode CaptureMode
  147. {
  148. get { return (CaptureMode)MarshalEx.ReadInt32(_ptr, 4); }
  149. set { MarshalEx.WriteInt32(_ptr, 4, Convert.ToInt32(value)); }
  150. }
  151. /// <summary>
  152. /// Get/Set the FileType
  153. /// </summary>
  154. public FileType FileType
  155. {
  156. get { return (FileType)MarshalEx.ReadInt32(_ptr, 8); }
  157. set { MarshalEx.WriteInt32(_ptr, 8, Convert.ToInt32(value)); }
  158. }
  159. /// <summary>
  160. /// Get/Set the capture orientation
  161. /// </summary>
  162. internal Orientation Orientation
  163. {
  164. get { return (Orientation)MarshalEx.ReadInt32(_ptr, 12); }
  165. set { MarshalEx.WriteInt32(_ptr, 12, Convert.ToInt32(value)); }
  166. }
  167. /// <summary>
  168. /// Get/Set the capture resolution
  169. /// </summary>
  170. public Resolution Resolution
  171. {
  172. get { return (Resolution)MarshalEx.ReadInt32(_ptr, 16); }
  173. set { MarshalEx.WriteInt32(_ptr, 16, Convert.ToInt32(value)); }
  174. }
  175. /// <summary>
  176. /// Get/Set maximum size of the file when capturing video
  177. /// </summary>
  178. public int VideoSize
  179. {
  180. get { return MarshalEx.ReadInt32(_ptr, 20); }
  181. set { MarshalEx.WriteInt32(_ptr, 20, value); }
  182. }
  183. /// <summary>
  184. /// Get/Set the type of capture to perform
  185. /// </summary>
  186. public CaptureType CaptureType
  187. {
  188. get { return (CaptureType)MarshalEx.ReadInt32(_ptr, 24); }
  189. set { MarshalEx.WriteInt32(_ptr, 24, Convert.ToInt32(value)); }
  190. }
  191. /// <summary>
  192. /// Get/Set default folder to store file-based captures in.
  193. /// </summary>
  194. public string SaveFolder
  195. {
  196. get 
  197. {
  198. byte[] buffer = MarshalEx.ReadByteArray(_ptr, 0, 520);
  199. return Encoding.Unicode.GetString(buffer, 0, buffer.Length).Trim(''); 
  200. }
  201. set 
  202. byte[] buffer = Encoding.Unicode.GetBytes(value);
  203. MarshalEx.WriteByteArray(_ptr, 28, buffer);
  204. }
  205. }
  206. #endregion
  207. /// <summary>
  208. /// Returns the pointer to the unmanaged struct 
  209. /// containing the configuration data.
  210. /// </summary>
  211. public IntPtr ToPointer()
  212. {
  213. return _ptr; 
  214. }
  215. public void Dispose()
  216. {
  217. // Unallocate the unmanaged memory if we have 
  218. // previously a block of memory
  219. if(_ptr != IntPtr.Zero)
  220. {
  221. MarshalEx.FreeHGlobal(_ptr);
  222. _ptr = IntPtr.Zero;
  223. }
  224. }
  225. }
  226. }