locked
使用CaptureElemen拍照时如何将默认方向变成竖向的 RRS feed

  • 问题

  • 在 WP8.1中,使用CaptureElemen进行拍照时为什么默认方向是横向的,怎么让变成竖向的。我采用了旋转变换把它变成竖向的,不过再从存储区读取出来时照片还是横向的。

    www.bcmeng.com

    2014年7月17日 2:33

答案

  • 你好。

    我也尝试了使用SetRecordRotation方法来改变录制方向,但是这个方法对Image的截取没起作用。

    既然这样,那么我们可以在BitmapImage 或者 Image 控件的方向上想办法:

    1. 对BitmapImage重新进行编码,达到旋转方向的目的,具体参见:MSDN How to edit an image

    2. 对Image控件进行旋转,这个相对简单,利用RotateTransform来设置Image的RenderTransform即可。

    2014年7月17日 6:29

全部回复

  • 你好。

    关于这个问题,可以参考这篇文章,监听页面的OrientationChanged事件,根据页面的显示方向,旋转VideoRotation的角度。

    文章在此处:Windows Phone 8.1 camera orientation

     




    2014年7月17日 2:44
  • 您好,谢谢。就是我直接使用这行代码,没有加屏幕方向的判断: captureManager.SetPreviewRotation(VideoRotation.Clockwise90Degrees); 它达到的效果和我直接在XAML旋转的效果一样,直接拍照的时候是竖的了,不过再次读取出来的时候还是横着的。是我这样做错了吗?谢谢。
       public sealed partial class MainPage : Page
        {
            private Windows.Graphics.Display.DisplayOrientations m_displayOrientation;
            MediaCapture captureManager = null;
            public MainPage()
            {
                this.InitializeComponent();
                captureManager = new MediaCapture();
                this.NavigationCacheMode = NavigationCacheMode.Required;
            }
    
    
    
    
            async private void StartCapturePreview_Click(object sender, RoutedEventArgs e)
            {
    
                capturePreview.Source = captureManager;
                await captureManager.StartPreviewAsync();
            }
    
    
    
            async private void CapturePhoto_Click(object sender, RoutedEventArgs e)
            {
                ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();
    
                // create storage file in local app storage
                StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
                    "TestPhoto.jpg",
                    CreationCollisionOption.GenerateUniqueName);
    
                // take photo
                await captureManager.CapturePhotoToStorageFileAsync(imgFormat, file);
    
                // Get photo as a BitmapImage
                BitmapImage bmpImage = new BitmapImage(new Uri(file.Path));
    
                // imagePreivew is a <Image> object defined in XAML
                imagePreivew.Source = bmpImage;
    
                captureManager.Dispose();
            }
    
    
    
            async protected override void OnNavigatedTo(NavigationEventArgs e)
            {
    
                await captureManager.InitializeAsync();
                captureManager.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
            }

      <Grid>
            <StackPanel >
                <CaptureElement  x:Name="capturePreview" Stretch="UniformToFill" RenderTransformOrigin="0.5,0.5" >
                  
                 </CaptureElement>
                <Image x:Name="imagePreivew"  />
                <StackPanel Orientation="Horizontal">
                    <Button Click="StartCapturePreview_Click" Content="拍照" />
                    <Button Click="CapturePhoto_Click" Content="保存 "/>
                </StackPanel>
            </StackPanel>
    
       
        </Grid>


    www.bcmeng.com

    2014年7月17日 4:54
  • 你好。

    我也尝试了使用SetRecordRotation方法来改变录制方向,但是这个方法对Image的截取没起作用。

    既然这样,那么我们可以在BitmapImage 或者 Image 控件的方向上想办法:

    1. 对BitmapImage重新进行编码,达到旋转方向的目的,具体参见:MSDN How to edit an image

    2. 对Image控件进行旋转,这个相对简单,利用RotateTransform来设置Image的RenderTransform即可。

    2014年7月17日 6:29
  • 哦。谢谢了。和我想的一样。只要captureElenment的处理没问题就好。



    www.bcmeng.com

    2014年7月17日 6:45