关注此帖:How can I bind source MediaCapture to CaptureElement using Caliburn.Micro?我尝试构建自己的照片捕获Windows Phone 8.1 WinRT应用。但即使我将ContentControl的水平和垂直内容对齐设置为拉伸,我的CaptureElement也非常小(大约100px / 80px)。
这是我的xaml
<Grid Margin="0,20,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ContentControl Content="{Binding CaptureElement}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,20" Grid.Row="0"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
Visibility="{Binding IsInCaptureMode, Converter={StaticResource BoolToVisibilityConverter}}"/>
<Button Grid.Row="1" Content="Take" Command="{Binding TakePhotoCommand}"
Visibility="{Binding IsInCaptureMode, Converter={StaticResource BoolToVisibilityConverter}}"/>
</Grid>
这是我的ViewModel
public MediaCapture MediaCapture
{
get
{
return this.mediaCapture;
}
set
{
this.mediaCapture = value;
this.RaisePropertyChanged(() => this.MediaCapture);
}
}
public CaptureElement CaptureElement
{
get
{
return this.captureElement;
}
set
{
this.captureElement = value;
this.RaisePropertyChanged(() => this.CaptureElement);
}
}
private async void ConfigureMediaCapture()
{
this.MediaCapture = new MediaCapture();
await this.MediaCapture.InitializeAsync();
this.MediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
this.CaptureElement.Source = MediaCapture;
this.IsInCaptureMode = false;
}
当我尝试更改CaptureElement的属性时,CaptureElement的高度就像我的设备屏幕,所以它没问题,但宽度仍然是大约80~100像素。
this.CaptureElement = new CaptureElement
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
Stretch = Stretch.Fill,
};
当我为ContentControl设置按钮或其他控件时,一切都还可以。按钮具有所有屏幕的宽度和高度,但CaptureElement没有。任何人都可以告诉我这里有什么问题,或者我必须设置什么,以改变CaptureElement的宽度。
答案 0 :(得分:3)
我认为其中一个问题是您在SetPreviewRotation
方法中使用ConfigureMediaCapture
。如果我没记错的话,它不会设置预览的新宽高比,而是将新预览信箱放在非旋转宽高比内。
如果你想做轮换,那就是:
// Rotation metadata to apply to the preview stream (MF_MT_VIDEO_ROTATION)
Guid RotationKey = new Guid("C380465D-2271-428C-9B83-ECEA3B4A85C1");
var props = this.MediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview);
props.Properties.Add(RotationKey, rotationDegrees);
await this.MediaCapture.SetEncodingPropertiesAsync(MediaStreamType.VideoPreview, props, null);
参考:http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868174.aspx
我从Microsoft github页面获取了适用于Windows 10的通用Windows平台示例的代码,尽管很多代码仍然适用于Windows / Phone 8.x。
答案 1 :(得分:0)
对不起maniek099,但你的应用程序是否有全屏摄像头预览?我尝试做同样的事情,但我的相机预览不是全屏,它小于屏幕高度。
由于 Alessio的