2011-07-07 12 views
10

Estoy usando el control PhotoCamera con las herramientas de desarrollo de Windows Phone 7 Mango Beta 2.Orientación de ViewFinder con Windows Phone 7 PhotoCamera de Mango

El "visor" para el control de la cámara es un objeto rectángulo relleno con un VideoBrush, como en el ejemplo aquí:

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

Mi problema es que cuando funciono con la aplicación en mi teléfono, el La imagen de ViewFinder siempre se muestra rotada 90 grados en el sentido contrario a las agujas del reloj. Este es el caso sin importar cómo esté posicionado el teléfono.

¿Alguien sabe cómo puedo orientar correctamente el ViewFinder?

+2

has configurado SuppoertedOrientations = "PortraitOrLandscape"? –

+0

Lo configuré en Retrato –

+0

¿Esto significa que no habrá ninguna diferencia si lo configura en PortraitOrLandscape? –

Respuesta

9

Sí, la orientación es algo que necesita para administrar con una relativa Transform:

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

continuación, puede utilizar la clase PHOTOCAMERA para determinar cómo desea rotarlo:

double cameraRotation = theCamera.Orientation; 

// Use the orientation to determine how to transform 
// the camera preview 
previewTransform.Rotation = theCamera.Orientation + 90.0; // Landscape? 

HTH

+0

pero tomaría la imagen 4: 3 y la aplastaría para que quepa en un marco de 3: 4 y distorsione la imagen ... – xster

2

no es necesario hacer mucho código, asumiendo que son en modo vertical, simplemente llame a:

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

Pero, por supuesto, cualquiera que sea la orientación que utilice para el visor, ¡la imagen resultante ES aún en horizontal! ¿Alguien tiene una idea de cómo arreglar esto mejor?

+0

¡Gracias, esto funciona perfecto! – Nirus

4

La adición de más aclaraciones a la respuesta: Una cosa que la documentación describe que no se menciona aquí es que la relación de transformación se ajustará en caso OnOrientationChanged. Otra diferencia es que la transformación relativa no se especifica en el XAML.

En los docs (How to: Create a Base Camera Application for Windows Phone), el rectángulo se llena con el VideoBrush como sigue:

<!--Camera viewfinder >--> 
<Rectangle Width="640" Height="480" 
      HorizontalAlignment="Left" 
      x:Name="viewfinderContainer"> 

    <Rectangle.Fill> 
     <VideoBrush x:Name="viewfinderBrush" /> 
    </Rectangle.Fill> 
</Rectangle> 

Luego, en el código subyacente, el evento OnOrientationChanged gira el rectángulo basada en la orientación:

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

El código en este tema (que corresponde a la muestra) está configurado para usar solo la orientación horizontal, quizás es por eso que solo obtiene imágenes de paisaje (?) Al principio, se agregan los siguientes atributos al teléfono: PhoneApplicationPage e lement en MainPage.xaml:

SupportedOrientations="Landscape" Orientation="LandscapeLeft" 

Si todavía está recibiendo imágenes orientadas de forma incorrecta, sincronizar sus imágenes a su PC y ver si están correctamente orientados, mientras las ve allí (en el PC). Podría ser un error con la Beta que está causando que la imagen no aparezca correctamente en el dispositivo.

Espero que ayude. Cheers

0

sí, eliminé OnOrientationChanged-Eventhandler y simplemente configuré la transformación. En Xaml, por supuesto, cambié la orientación a retrato.

Ahora, el visor muestra el retrato y la página también es vertical.Pero la imagen se guarda como una miniatura en el carrete de la cámara, por lo que puedo ver directamente en el dispositivo que la imagen capturada aún tiene una orientación horizontal.

estaría bien, si alguien puede verificar que este es un error beta, o si sólo hubiera hecho algo de código estúpida aquí;)

Gracias.