Ориентация видоискателя с Windows Phone 7 Манго Фотокамера - PullRequest
10 голосов
/ 07 июля 2011

Я использую элемент управления PhotoCamera с инструментами разработки Windows Phone 7 Mango Beta 2.

«ViewFinder» для элемента управления камеры - это прямоугольный объект, заполненный VideoBrush, как в примере здесь:

http://msdn.microsoft.com/en-us/library/hh202956%28v=VS.92%29.aspx

Моя проблема в том, что когда я запускаю приложение на своем телефоне, изображение ViewFinder всегда отображается повернутым на 90 градусов против часовой стрелки. Это тот случай, независимо от того, как телефон расположен.

Кто-нибудь знает, как правильно ориентировать видоискатель?

Ответы [ 4 ]

9 голосов
/ 11 июля 2011

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

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

4 голосов
/ 14 июля 2011

Добавление дополнительных пояснений к ответу : в документации не упоминается о том, что относительное преобразование настраивается в событии 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"

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

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

2 голосов
/ 14 июля 2011

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

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

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

0 голосов
/ 15 июля 2011

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

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

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

Спасибо.

...