我正在将PhotoCamera控件与Windows Phone 7 Mango Beta 2开发工具结合使用。
相机控件的“ViewFinder”是一个填充了VideoBrush的矩形对象,如下例所示:
http://msdn.microsoft.com/en-us/library/hh202956%28v=VS.92%29.aspx
我的问题是,当我在手机上运行应用程序时,ViewFinder图像始终显示为逆时针旋转90度。无论手机如何定位都是如此。
有谁知道如何正确定位ViewFinder?
答案 0 :(得分:9)
是的,您需要使用相对变换来管理方向:
<!--Camera viewfinder >-->
<Rectangle Grid.Row="1"
x:Name="preview">
<Rectangle.Fill>
<VideoBrush x:Name="previewBrush">
<VideoBrush.RelativeTransform>
<CompositeTransform x:Name="previewTransform"
CenterX=".5"
CenterY=".5" />
</VideoBrush.RelativeTransform>
</VideoBrush>
</Rectangle.Fill>
</Rectangle>
然后您可以使用PhotoCamera类来确定旋转方式:
double cameraRotation = theCamera.Orientation;
// Use the orientation to determine how to transform
// the camera preview
previewTransform.Rotation = theCamera.Orientation + 90.0; // Landscape?
HTH
答案 1 :(得分:4)
为答案添加更多说明:此处未提及的文档描述的一件事是在OnOrientationChanged事件中调整了相对变换。另一个区别是XAML中未指定相对变换。
在文档(How to: Create a Base Camera Application for Windows Phone)中,矩形用videobrush填充如下:
<!--Camera viewfinder >-->
<Rectangle Width="640" Height="480"
HorizontalAlignment="Left"
x:Name="viewfinderContainer">
<Rectangle.Fill>
<VideoBrush x:Name="viewfinderBrush" />
</Rectangle.Fill>
</Rectangle>
然后,在代码隐藏中,OnOrientationChanged事件根据方向旋转矩形:
// Ensure that the viewfinder is upright in LandscapeRight.
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
if (e.Orientation == PageOrientation.LandscapeRight)
{
viewfinderBrush.RelativeTransform =
new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 180 };
}
else
{
viewfinderBrush.RelativeTransform =
new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 0 };
}
base.OnOrientationChanged(e);
}
本主题中的代码(对应于示例)配置为仅使用横向方向,这可能就是为什么您只获取横向图像(?)开头时,会将以下属性添加到手机中: MainPage.xaml中的PhoneApplicationPage元素:
SupportedOrientations="Landscape" Orientation="LandscapeLeft"
如果您仍然无法正确定位图像,请将图像同步到PC,并在其中查看图像时是否正确(在PC上)。这可能是Beta的一个错误导致图像无法在设备上正确显示。
希望有所帮助。干杯
答案 2 :(得分:2)
假设您处于纵向模式,您不需要执行那么多代码,只需调用:
viewfinderBrush.RelativeTransform
= new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 90 };
但是,当然,无论您使用哪种方向取景器,最终的图像仍然是景观!有没有人知道如何最好地解决这个问题?
答案 3 :(得分:0)
是的,我删除了OnOrientationChanged-Eventhandler并只设置了转换。在Xaml当然我将方向改为肖像。
现在,取景器显示肖像,页面也是肖像。但是图像作为缩略图保存到相机胶卷,因此我可以直接在设备上看到捕获的图像仍然是横向方向。
如果有人可以验证这是Beta错误,或者我们刚刚在这里做了一些愚蠢的代码,那会很酷吗。)
感谢。