导出 (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.PhotoCamera 类以编程方式访问手机的相机。本主题介绍如何采用编程方式设置相机闪光灯模式。本主题是如何为 Windows Phone 8 创建基本相机应用的继续,并且假定您已在该主题中创建了基本相机项目。

提示提示:

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

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

Windows Phone 支持 FlashMode 枚举中的下列闪光灯模式。

闪光灯模式

描述

Off

相机闪光灯已禁用。

On

相机闪光灯已启用。

RedEyeReduction

红眼消除已启用。

自动

相机闪光灯在自动模式下使用。

重要说明重要说明:

并非所有设备都支持所有闪光灯模式;重要的是在使用之前,调用 IsFlashModeSupported(FlashMode) 方法来确认可用的模式。

本节提供在您的应用中实现闪光灯模式配置所需的代码。

实现相机闪光灯的步骤

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

  2. 在主页 XAML 文件 MainPage.xamlStackPanel 元素中添加以下代码,放在名为 ShutterButtonButton 元素下面。该代码为相机闪光灯的按钮。

    <Button Name="FlashButton" Content="Fl:TBD" Click="changeFlash_Clicked" 
      FontSize="26" FontWeight="ExtraBold" Height="75"/>
    
    
  3. 打开主页的代码隐藏文件 MainPage.xaml.cs,在 MainPage 类构造函数上面添加以下变量声明:

        // Holds current flash mode.
        private string currentFlashMode;
    
    
  4. MainPage.xaml.cs 中,向 OnNavigatedTo 方法中添加以下代码,放在 Disable UI 注释下面。

    FlashButton.IsEnabled = false;
    

    该代码禁用闪光灯按钮。当设备上的相机不可用时使用。

  5. MainPage.xaml.cs 中,向 cam_Initialized 方法中添加以下代码,放在 txtDebug 语句下面。

        // Set flash button text.
        FlashButton.Content = "Fl:" + cam.FlashMode.ToString();
    
    

    该代码显示 FlashButton 按钮上的当前闪光灯模式。

  6. MainPage.xaml.cs 中,向 MainPage 类添加以下代码。该代码通过每次按按钮时切换到另一种闪光灯模式来实现 changeFlash_Clicked 的事件处理程序。

        // Activate a flash mode.
        // Cycle through flash mode options when the flash button is pressed.
        private void changeFlash_Clicked(object sender, RoutedEventArgs e)
        {
    
            switch (cam.FlashMode)
            {
                case FlashMode.Off:
                    if (cam.IsFlashModeSupported(FlashMode.On))
                    {
                        // Specify that flash should be used.
                        cam.FlashMode = FlashMode.On;
                        FlashButton.Content = "Fl:On";
                        currentFlashMode = "Flash mode: On";
                    }
                    break;
                case FlashMode.On:
                    if (cam.IsFlashModeSupported(FlashMode.RedEyeReduction))
                    {
                        // Specify that the red-eye reduction flash should be used.
                        cam.FlashMode = FlashMode.RedEyeReduction;
                        FlashButton.Content = "Fl:RER";
                        currentFlashMode = "Flash mode: RedEyeReduction";
                    }
                    else if (cam.IsFlashModeSupported(FlashMode.Auto))
                    {
                        // If red-eye reduction is not supported, specify automatic mode.
                        cam.FlashMode = FlashMode.Auto;
                        FlashButton.Content = "Fl:Auto";
                        currentFlashMode = "Flash mode: Auto";
                    }
                    else 
                    {
                        // If automatic is not supported, specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
                case FlashMode.RedEyeReduction:
                    if (cam.IsFlashModeSupported(FlashMode.Auto))
                    {
                        // Specify that the flash should be used in the automatic mode.
                        cam.FlashMode = FlashMode.Auto;
                        FlashButton.Content = "Fl:Auto";
                        currentFlashMode = "Flash mode: Auto";
                    }
                    else
                    {
                        // If automatic is not supported, specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
                case FlashMode.Auto:
                    if (cam.IsFlashModeSupported(FlashMode.Off))
                    {
                        // Specify that no flash should be used.
                        cam.FlashMode = FlashMode.Off;
                        FlashButton.Content = "Fl:Off";
                        currentFlashMode = "Flash mode: Off";
                    }
                    break;
            }
    
            // Display current flash mode.
            this.Dispatcher.BeginInvoke(delegate()
            {
                txtDebug.Text = currentFlashMode;
            });
        }
    
    
  7. 在设备上,通过选择“调试 | 启动调试”菜单命令来运行应用。

显示:
© 2014 Microsoft