Ориентация ViewFinder с Windows Phone 7 Mango PhotoCamera

Я использую элемент управления 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?

Ответ 1

Да, ориентация - это то, что вам нужно будет сделать с помощью Относительного преобразования:

<!--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? 

НТН

Ответ 2

Добавление большего пояснения к ответу: Одна вещь, описанная в документации, которая здесь не упоминается, заключается в том, что относительное преобразование настраивается в событии OnOrientationChanged. Другое отличие состоит в том, что относительное преобразование не указано в XAML.

В документах (Как создать приложение базовой камеры для Windows Phone) прямоугольник заполняется видеошопом следующим образом:

<!--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);
    }

Код в этом разделе (который соответствует образцу) настроен только на использование ландшафтной ориентации, возможно, именно поэтому вы получаете только пейзажные изображения (?). Вначале к телефону добавляются следующие атрибуты: Элемент PhoneApplicationPage в MainPage.xaml:

SupportedOrientations="Landscape" Orientation="LandscapeLeft"

Если вы по-прежнему неправильно ориентированы на изображения, синхронизируйте изображения с ПК и посмотрите, правильно ли они ориентированы, когда вы просматриваете их (на вашем ПК). Это может быть ошибка с бета-версией, которая приводит к неправильному отображению изображения на устройстве.

Надеюсь, что это поможет. Приветствия

Ответ 3

Вам не нужно делать такой код, если вы находитесь в портретном режиме, просто позвоните:

viewfinderBrush.RelativeTransform 
    = new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 90 };

Но, конечно, независимо от ориентации, которую вы используете для видоискателя, результирующее изображение все еще в ландшафте! У кого-нибудь есть идея, как лучше всего исправить это?

Ответ 4

да, я удалил OnOrientationChanged-Eventhandler и просто установил преобразование. В Xaml, конечно, я изменил ориентацию на портрет.

Теперь видоискатель показывает портрет, а страница - портрет. Но изображение сохраняется как миниатюра для рулона камеры, поэтому я могу видеть непосредственно на устройстве, что захваченное изображение имеет неподвижную ландшафтную ориентацию.

Было бы здорово, если бы кто-то мог проверить, что это ошибка Beta, или если мы только что сделали какой-то глупый код здесь;)

Спасибо.