1

次のコードを使用して、WindowsPhone8のPhotoCaptureDeviceオプションを使用してスナップを取ります。

if (PhotoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Back) ||
                PhotoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Front))
            {
                // Initialize the camera, when available.
                if (PhotoCaptureDevice.AvailableSensorLocations.Contains(CameraSensorLocation.Back))
                {
                    // Use the back camera.
                    System.Collections.Generic.IReadOnlyList<Windows.Foundation.Size> SupportedResolutions =
                        PhotoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Back);
                    Windows.Foundation.Size res = SupportedResolutions[0];
                    d = await PhotoCaptureDevice.OpenAsync(CameraSensorLocation.Back, res);
                }
                else
                {
                    // Otherwise, use the front camera.
                    System.Collections.Generic.IReadOnlyList<Windows.Foundation.Size> SupportedResolutions =
                        PhotoCaptureDevice.GetAvailableCaptureResolutions(CameraSensorLocation.Front);
                    Windows.Foundation.Size res = SupportedResolutions[0];
                    d = await PhotoCaptureDevice.OpenAsync(CameraSensorLocation.Front, res);
                }

                await d.SetPreviewResolutionAsync(new Windows.Foundation.Size(640, 480));
                await d.SetCaptureResolutionAsync(new Windows.Foundation.Size(640, 480));

                d.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation,
                              d.SensorLocation == CameraSensorLocation.Back ?
                              d.SensorRotationInDegrees : -d.SensorRotationInDegrees);

                _device = d;
            }

最後に、このデバイスをビデオブラシのソースに設定しました。しかし、アプリケーションが戻るキーを押したままにしてこの状態になると、休止状態になります。空のページが表示され、カメラは表示されません。誰かがこれについて私を助けてくれませんか?

4

1 に答える 1

3

Nokiaには、WP8のPhotoCaptureDeviceで有効になっている多くの機能の優れたサンプルアプリがあります。@http://projects.developer.nokia.com/cameraexplorerでチェックしてください

最初のページに、PhotoCaptureDeviceをVideoBrush.SetSource()として使用するエンドツーエンドの例もあります。MainPage.xaml.csのOnNavigatedToメソッドから開始して、PhotoCaptureDevice@http://projects.developer.nokia.com/cameraexplorer/browser/CameraExplorer/MainPage.xaml.csでカメラビューファインダーを初期化する方法を確認します

関連する部分は次のとおりです。

    /// <summary>
    /// If camera has not been initialized when navigating to this page, initialization
    /// will be started asynchronously in this method. Once initialization has been
    /// completed the camera will be set as a source to the VideoBrush element
    /// declared in XAML. On-screen controls are enabled when camera has been initialized.
    /// </summary>
    protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (_dataContext.Device == null)
        {
            ShowProgress("Initializing camera...");

            await InitializeCamera(CameraSensorLocation.Back);

            HideProgress();
        }

        videoBrush.RelativeTransform = new CompositeTransform()
        {
            CenterX = 0.5,
            CenterY = 0.5,
            Rotation = _dataContext.Device.SensorLocation == CameraSensorLocation.Back ?
                       _dataContext.Device.SensorRotationInDegrees :
                     - _dataContext.Device.SensorRotationInDegrees
        };

        videoBrush.SetSource(_dataContext.Device);

        overlayComboBox.Opacity = 1;

        SetScreenButtonsEnabled(true);
        SetCameraButtonsEnabled(true);

        base.OnNavigatedTo(e);
    }

    /// <summary>
    /// Initializes camera. Once initialized the instance is set to the DataContext.Device property
    /// for further usage from this or other pages.
    /// </summary>
    /// <param name="sensorLocation">Camera sensor to initialize</param>
    private async Task InitializeCamera(CameraSensorLocation sensorLocation)
    {
        Windows.Foundation.Size initialResolution = new Windows.Foundation.Size(640, 480);
        Windows.Foundation.Size previewResolution = new Windows.Foundation.Size(640, 480);
        Windows.Foundation.Size captureResolution = new Windows.Foundation.Size(640, 480);

        PhotoCaptureDevice d = await PhotoCaptureDevice.OpenAsync(sensorLocation, initialResolution);

        await d.SetPreviewResolutionAsync(previewResolution);
        await d.SetCaptureResolutionAsync(captureResolution);

        d.SetProperty(KnownCameraGeneralProperties.EncodeWithOrientation,
                      d.SensorLocation == CameraSensorLocation.Back ?
                      d.SensorRotationInDegrees : - d.SensorRotationInDegrees);

        _dataContext.Device = d;
    }

および関連するXAML:

        <Canvas x:Name="VideoCanvas">
            <Canvas.Background>
                <VideoBrush x:Name="videoBrush"/>
            </Canvas.Background>
            <Rectangle x:Name="FocusIndicator" Stroke='Red' Opacity="0.7" Width="80" Height="80" StrokeThickness="5" Visibility="Collapsed"/>
        </Canvas>
于 2012-12-06T01:59:45.433 に答える