Windows Phone 7 - Camera Flash App Not Functioning

不打扰是莪最后的温柔 提交于 2019-12-08 04:55:22

问题


In attempting to follow the instructions here - http://msdn.microsoft.com/en-us/library/hh202949.aspx I have coded a very simple WP7 app to turn on the camera flash. Everything appears to work, except....the flash doesn't activate.

My phone is Samsung SGH-I917 (latest OS update), I am using the WP7 SDK 7.1, I've checked that the flash of my camera actually does work. I have also checked to make sure the following is in the WMAppManifest.xml file.

<Capability Name="ID_CAP_ISV_CAMERA" />

The MessageBox use you see in my code below, indicates that the camera object has been initialized properly, the flashmode is supported and the FlashMode.On has been set. Yet...no flash will actually turn on. What am I missing?

Here is the code:

public partial class MainPage : PhoneApplicationPage
{
    PhotoCamera cam;        

    public MainPage()
    {
        InitializeComponent();  
    }

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        cam = new PhotoCamera(CameraType.Primary);
        cam.Initialized += new EventHandler<CameraOperationCompletedEventArgs>(cam_Initialized);
        cam.CaptureCompleted += new EventHandler<CameraOperationCompletedEventArgs>(cam_CaptureCompleted);
        cam.CaptureImageAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureImageAvailable);
        cam.CaptureThumbnailAvailable += new EventHandler<ContentReadyEventArgs>(cam_CaptureThumbnailAvailable);
        viewfinderBrush.SetSource(cam);
    }

    void cam_CaptureThumbnailAvailable(object sender, ContentReadyEventArgs e)
    {
        return;
    }

    void cam_CaptureImageAvailable(object sender, ContentReadyEventArgs e)
    {
        return;
    }

    void cam_CaptureCompleted(object sender, CameraOperationCompletedEventArgs e)
    {
        return;
    }

    protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
    {
        if (cam != null)
        {
            cam.Dispose();
            cam.Initialized -= cam_Initialized;
            cam.CaptureCompleted -= cam_CaptureCompleted;
            cam.CaptureImageAvailable -= cam_CaptureImageAvailable;
            cam.CaptureThumbnailAvailable -= cam_CaptureThumbnailAvailable;
        }
    }

    void cam_Initialized(object sender, CameraOperationCompletedEventArgs e)
    {
        this.Dispatcher.BeginInvoke(delegate()
        {
            MessageBox.Show("Cam Init, FlashMode.On Supported?: " + cam.IsFlashModeSupported(FlashMode.On).ToString());
        });

        return;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        if(cam.FlashMode == FlashMode.On)
            cam.FlashMode = FlashMode.Off;
        else
            cam.FlashMode = FlashMode.On;

        this.Dispatcher.BeginInvoke(delegate()
        {
            MessageBox.Show(cam.FlashMode.ToString());
        });
    }
}

And here is the XAML:

<phone:PhoneApplicationPage 
x:Class="PhoneApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock x:Name="ApplicationTitle" Text="" Style="{StaticResource PhoneTextNormalStyle}"/>
        <TextBlock x:Name="PageTitle" Text="FlashLite" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>
    <Canvas x:Name="viewfinderCanvas" HorizontalAlignment="Center" >
        <Canvas.Background>
            <VideoBrush x:Name="viewfinderBrush" />
        </Canvas.Background>
    </Canvas>
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <Button Width="200" Height="100" Content="Flash" Click="Button_Click" />
    </Grid>
</Grid>


回答1:


cam.FlashMode = FlashMode.On;

only indicates that the flash will be activated when capturing the image.

That is achieved by doing

cam.CaptureImage();

EDIT : If you only want to trigger the flash, you can just call cam.Focus();



来源:https://stackoverflow.com/questions/11495426/windows-phone-7-camera-flash-app-not-functioning

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!