Photo Camera API:如何正确处理它?

时间:2013-02-04 08:32:41

标签: c# windows-phone-7 xaml camera windows-phone-8

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

问题在于,有时候,在扫描之后,整个应用程序的速度减慢到30fps而不是60fps,没有任何实际原因。我怀疑相机仍在后台运行,帧同步将应用锁定为30fps,这是我的问题:如何正确处理使用PhotoCamera API的网页?

我的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测试应用程序。

1 个答案:

答案 0 :(得分:0)

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

您确定要发布内存,即取消订阅PhotoCamera类活动吗?

您的StopScan方法何时被调用?一个好的做法是在OnNavigatingFrom的{​​{1}}中调用它。

以下是MSDN中处理PhotoCamera的代码示例:

PhoneApplicationPage

Source