我在使用Camera API时遇到了一个严重问题,即使我知道在 99.99% 的情况下,框架不应该受到责备,但我开始考虑在 Windows 中处理相机的方式可能存在问题电话。
问题
我的代码很简单,只有两个非常简单的页面:第一个是用于导航到第二个的按钮,它使用相机 API 并在屏幕上呈现预览缓冲区。在第一页上,我还添加了一个带有循环动画的矩形来旋转它,以强制应用程序更新帧速率。
配置文件会话的结果如下:
只要我停留在第一页,帧率计数器就会显示坚如磐石的 60fps。一旦我启动以相机为特色的第二页,由于使用了系统相机,fps 会下降。但是,当我按下后退键时,相机已正确放置,但帧速率有点低(~53 fps)。更令人印象深刻的是,图表数据显示某些东西仍在运行并损害性能!内置分析告诉我,系统应用程序使用了 47% 的 CPU,与显示相机页面时相同!
这种行为是否有已知原因?
我的代码
我的第二页代码隐藏:
public partial class MyScannerView : PhoneApplicationPage {
private PhotoCamera camera;
public MyScannerView() {
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e) {
base.OnNavigatedTo(e);
camera = new PhotoCamera(CameraType.Primary);
viewfinderBrush.SetSource(camera);
}
protected override void OnNavigatedFrom(NavigationEventArgs e) {
base.OnNavigatedFrom(e);
if (camera != null) {
camera.Dispose();
camera = null;
}
}
}
第二页的我的 XAML:
<Canvas x:Name="viewfinderCanvas">
<Canvas.Background>
<VideoBrush x:Name="viewfinderBrush">
<VideoBrush.RelativeTransform>
<CompositeTransform x:Name="viewfinderTransform" CenterX="0.5" CenterY="0.5" />
</VideoBrush.RelativeTransform>
</VideoBrush>
</Canvas.Background>
</Canvas>