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

2012/2/9

在目标为 Windows Phone OS 7.1 的相机应用程序中,您可以采用编程方式访问设备上的硬件快门按钮。本主题向您介绍如何在您的应用程序中实现该功能。本主题是如何为 Windows Phone 创建基本相机应用程序的继续,并且假定您已在该主题中创建了基本相机项目。

提示提示:

本主题与基本相机示例相对应。若要下载完整的项目,请参阅 Windows Phone 的代码示例

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

事件

说明

ShutterKeyHalfPressed

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

ShutterKeyPressed

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

ShutterKeyReleased

当松开快门按钮时。

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

注意注意:

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

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

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

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

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

注意注意:

本主题基于 C# 开发;但也提供 Visual Basic 代码。

实现硬件快门按钮的步骤

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

  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. 在设备上,通过选择“调试 | 启动调试”菜单命令来运行应用程序。

显示: