导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

如何访问 Windows Phone 8 中的硬件相机快门按钮

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

从 Windows Phone OS 7.1 开始,应用可以采用编程的方式访问手机上的硬件快门按钮。本主题向您介绍如何在您的应用中实现该功能。此硬件快门按钮可以用在使用 Microsoft.Devices.PhotoCameraPhotoCaptureDevice 类的相机应用中以访问相机传感器。本主题是如何为 Windows Phone 8 创建基本相机应用的继续,并且假定您已在该主题中创建了基本相机项目。

提示提示:

从 Windows Phone 8 开始,应用可以将 PhotoCaptureDevice 类用于高级捕获方案。PhotoCaptureDevice 允许应用控制照片属性,例如 ISO、曝光补偿和手动对焦位置(在手机上可用时)。本主题没有演示 PhotoCaptureDevice;有关此类的更多信息,请参见 Windows Phone 8 的高级照片拍摄

本主题与基本相机示例相对应。

硬件快门按钮访问是通过 CameraButtons 类中的一系列事件进行管理的,如下表所述。

事件

描述

ShutterKeyHalfPressed

当按下快门按钮并保持大约 800 毫秒时。短于该时间的半按压将不会触发该事件。

ShutterKeyPressed

当快门按钮收到一个完全按压时。

ShutterKeyReleased

当松开快门按钮时。

这些事件可以用于拍摄照片或视频。拍摄视频时,必须在按硬件快门按钮之前调用 Start 方法。如果未启动捕获源,则不会引发这些事件。有关在 Windows Phone 应用中拍摄视频的更多信息,请参阅如何在 Windows Phone 8 的相机应用中录制视频

说明注意:

在前面的练习中,软件快门和自动对焦按钮都用于演示采用编程方式访问 PhotoCamera API。 若要优化最终用户的体验,我们建议您的应用使用相机上的硬件快门按钮进行自动对焦和快门操作。

在本节中,将实现这些事件以获得以下应用行为:

  • 完全按压快门按钮拍摄图像并将其保存到媒体库。

  • 半按压快门按钮启动相机自动对焦。

  • 松开快门按钮取消自动对焦。

实现硬件快门按钮的步骤

  1. 打开在如何为 Windows Phone 8 创建基本相机应用中创建的基本相机项目。

  2. 打开主页的代码隐藏文件 MainPage.xaml.cs,向 OnNavigatedTo(NavigationEventArgs) 方法中添加以下代码。

        // The event is fired when the shutter button receives a half press.
        CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;
    
        // The event is fired when the shutter button receives a full press.
        CameraButtons.ShutterKeyPressed += OnButtonFullPress;
    
        // The event is fired when the shutter button is released.
        CameraButtons.ShutterKeyReleased += OnButtonRelease;
    
    
  3. MainPage.xaml.cs 中,调用 Dispose 方法之后,向 OnNavigatingFrom(NavigatingCancelEventArgs) 方法添加以下代码。该代码帮助释放与相机有关的内存。

        CameraButtons.ShutterKeyHalfPressed -= OnButtonHalfPress;
        CameraButtons.ShutterKeyPressed -= OnButtonFullPress;
        CameraButtons.ShutterKeyReleased -= OnButtonRelease;
    
    
  4. MainPage.xaml.cs 中,向 MainPage 类添加以下代码。

            // Provide auto-focus with a half button press using the hardware shutter button.
            private void OnButtonHalfPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    // Focus when a capture is not in progress.
                    try
                    {
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = "Half Button Press: Auto Focus";
                        });
    
                        cam.Focus();
                    }
                    catch (Exception focusError)
                    {
                        // Cannot focus when a capture is in progress.
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = focusError.Message;
                        });
                    }
                }
            }
    
            // Capture the image with a full button press using the hardware shutter button.
            private void OnButtonFullPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    cam.CaptureImage();
                }
            }
    
            // Cancel the focus if the half button press is released using the hardware shutter button.
            private void OnButtonRelease(object sender, EventArgs e)
            {
    
                if (cam != null)
                {
                    cam.CancelFocus();
                }
            }
    
    

    该代码使用这些事件处理程序调用 PhotoCamera 类的 Focus()CaptureImage()CancelFocus() 方法。

    说明注意:

    当在硬件快门按钮上启用时,将延长自动对焦一小段时间以匹配内置的相机体验。

  5. 在手机上,通过选择“调试 | 启动调试”菜单命令来运行应用。

显示:
© 2014 Microsoft