我正在使用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测试应用程序。
答案 0 :(得分:0)
调用cam.Dispose();
应该处理图像源流和Camera对象使用的空闲资源,这样就可以了。
您确定要发布内存,即取消订阅PhotoCamera类活动吗?
您的StopScan
方法何时被调用?一个好的做法是在OnNavigatingFrom
的{{1}}中调用它。
以下是MSDN中处理PhotoCamera的代码示例:
PhoneApplicationPage