使用.net compact framework控制pocket pc 的摄像机

使用摄像机
      用户从“文件”菜单中选择“新建背景”时,应用程序将创建并显示新的 CameraCaptureDialog 实例。该实例与 SelectPictureDialog 在相同的程序集 Microsoft.WindowsMobile.Forms 中。该对话框允许完整配置摄像机的初始设置,尽管用户仍然可以通过常规选项菜单调整它们。Mode 属性指定用户是否只能拍摄单张照片 (CameraCaptureMode.Still)、视频 (CameraCaptureMode.VideoOnly) 或带音频的视频 (CameraCaptureMode.VideoWithAudio)。由于希望拍摄背景图像,因此需要让应用程序将对话框设置为静止图片模式,并且让静止图像使用最高质量(使用 StillQuality 属性)。还可以设置指示视频长度的可选时间限制的属性 (VideoTimeLimit),以及确保视频适合以多媒体邮件发送的属性 (VideoTypes)。
    也可以设置 Resolution 属性以控制所拍图片的大小。通常,不支持任意值。而应当使用设备可接受的值(例如,640×480 或 1280×1024)。由于需要缩小图片以适应屏幕,因此请保留 Resolution 的默认值。
     一旦用户拍摄了图片,ShowDialog 方法将返回 DialogResult.OK 作为结果。现在,若要加载新拍摄的图片,可以使用前面用过的相同缩放技术,将现有图像调整到背景大小。由于只替换背景图像,因此用户已绘制的任何线条或文本将保持不变。一旦图片绘制到背景上,即可对整个客户端矩形调用 Invalidate,这将导致用现在显示为背景的新图片重绘屏幕。
检查系统状态
      您可以显示 CameraCaptureDialog,然后,如果设备没有摄像机,则引发 InvalidOperationException。但是,更好的做法是提早确定摄像机功能是否存在,然后,如果设备不提供摄像机功能,只需禁用该菜单选项。可以通过查询设备的常规配置并监视实时属性的更改情况来执行此任务。
      有关设备的信息可通过 SystemState 类进行公开,该类在 Microsoft.WindowsMobile.Status 程序集中。通过添加对该程序集及其依赖项 Microsoft.WindowsMobile 的引用,可以在应用程序中使用此信息。SystemState 类有许多静态属性,通过它们可以确定固定配置信息和实时信息,例如当前日期和时间或电池剩余电量。
      应用程序只需在启动时检查一次 CameraPresent 属性,然后,如果摄像机不可用,应用程序就可以禁用“新建背景”菜单选项。但是,SystemState 类公开您可以处理的 Changed 事件,以便在请求状态发生更改时得到通知。这样,不必使用静态属性,就可以创建 SystemState 实例,并将要监视的特定系统属性传递到构造函数中,然后只需添加 Changed 事件的处理程序。例如,可以扩展应用程序以监视 DisplayRotation 系统属性,以便当应用程序在用户滑出设备的键盘以及显示设备从纵向更改到横向时得到通知。或者,应用程序可以监视 ActiveSyncStatus 属性,以便有可能在设备正在执行同步时执行某些操作。
      在引发 Changed 事件之前,SystemState 类还会考虑 ComparisonType 和 ComparisonValue 属性。默认情况下,受监视属性中的所有更改都会引发 Changed 事件。但是,如果(例如)将 ComparisonType 属性设置为 ComparisonType.Greater 并将 ComparisonValue 属性设置为 2,则只有当正在监视的系统属性更改为大于 2 的值,才会引发 Changed 事件。通过使用其他比较类型(比如 Equals、Contains 或 StartsWith),您将能够对应用程序处理哪些事件进行很细致的控制。
     SystemState 的主要限制是,当状态发生更改时,应用程序必须正在运行,才能使它得到通知。还需要确保将您正在处理其 Changed 事件的 SystemState 实例声明为类级别的字段,而不是局部方法变量,以便它不会被垃圾收集,从而导致丢失事件。

你可能感兴趣的:(使用.net compact framework控制pocket pc 的摄像机)