2

我正在使用PhotoCameraAPI 构建一个二维码扫描页面(使用 ZXing)。但是,此页面只是应用程序的一小部分,因此并不总是显示。因此,应用程序在此页面和其他一些具有公共控件的页面之间导航。

问题是,有时,在扫描后,整个应用程序会在没有真正原因的情况下减慢到 30fps 而不是 60fps。我怀疑相机仍在后台运行,帧同步将应用程序锁定为 30fps,这是我的问题:如何正确处理使用PhotoCameraAPI 的页面?

我的 XAML:

<Grid Background="Black">
    <ProgressBar x:Name="PBar" IsIndeterminate="True" VerticalAlignment="Center" />

    <Rectangle x:Name="ScanRect">
        <Rectangle.Fill>
            <VideoBrush x:Name="ScanVideoBrush" />
        </Rectangle.Fill>
    </Rectangle>
</Grid>

我的 C# 停止扫描过程:

    private void StopScan() {
        if (analysisTimer != null) {
            analysisTimer.Stop();
            analysisTimer = null;
        }

        if (focusTimer != null) {
            focusTimer.Stop();
            focusTimer = null;
        }

        if (camera != null) {
            camera.Dispose();
            camera.Initialized -= OnCameraInitialized;
            camera = null;
        }

        // Following two lines are a try to dispose stuff 
        // as much as possible, but the app still lags
        // sometimes after a scan...

        ScanVideoBrush.SetSource(new MediaElement());
        ScanRect.Fill = new SolidColorBrush(Colors.Black);
    }

注意:我正在 Lumia 920 上测试该应用程序。

4

1 回答 1

0

调用cam.Dispose();应该释放 Camera 对象使用的图像源流和空闲资源,这样就可以了。

您确定要释放内存,即取消订阅 PhotoCamera 类事件吗?

StopScan什么时候调用你的方法?一个好的做法是OnNavigatingFromPhoneApplicationPage.

这是来自 MSDN 的处理 PhotoCamera 的代码示例:

protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
    if (cam != null)
    {
        // Dispose camera to minimize power consumption and to expedite shutdown. 
        cam.Dispose();

        // Release memory, ensure garbage collection. 
        cam.Initialized -= cam_Initialized;
        cam.CaptureCompleted -= cam_CaptureCompleted;
        cam.CaptureImageAvailable -= cam_CaptureImageAvailable;
        cam.CaptureThumbnailAvailable -= cam_CaptureThumbnailAvailable;
        cam.AutoFocusCompleted -= cam_AutoFocusCompleted;
        CameraButtons.ShutterKeyHalfPressed -= OnButtonHalfPress;
        CameraButtons.ShutterKeyPressed -= OnButtonFullPress;
        CameraButtons.ShutterKeyReleased -= OnButtonRelease;
    }
} 

资源

于 2013-02-04T09:33:27.227 回答