使用Windows Phone 7芒果照相机的ViewFinder方向

时间:2011-07-07 14:50:20

标签: camera windows-phone-7

我正在将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?

4 个答案:

答案 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错误,或者我们刚刚在这里做了一些愚蠢的代码,那会很酷吗。)

感谢。