2012-04-19 15 views
6

Estoy intentando hacer coincidir la orientación del videobrush con la orientación del teléfono, pero tengo problemas para implementar esta solución. Mi página xaml está configurada en PortraitOrLandscape, y me gustaría que el videobrinche sea correcto independientemente de la orientación del teléfono. Antes de añadir el cambio de orientación if para el evento onOrentationChanged, la siguiente situación se está produciendola orientación del videobrush no coincide con la orientación del teléfono

Teléfono: Paisaje izquierda, VideoBrush: lado derecho hacia arriba

Teléfono: Retrato, VideoBrush, girar en sentido horario -90

Teléfono : Paisaje derecha, VideoBrush, girar en sentido horario -180

XAML

<Rectangle x:Name="videoRectangle" Margin="0,0,0,0"> 
      <Rectangle.Fill> 
       <VideoBrush x:Name="viewfinderBrush" AlignmentX="Left" AlignmentY="Top" Stretch="UniformToFill"> 
        <VideoBrush.RelativeTransform> 
         <CompositeTransform x:Name="viewfinderTransform" 
              CenterX="0.5" CenterY="0.5"/> 
        </VideoBrush.RelativeTransform> 
       </VideoBrush>      
      </Rectangle.Fill> 
     </Rectangle> 

XAML.CS

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
    { 
     base.OnOrientationChanged(e); 

     if (e.Orientation == PageOrientation.LandscapeLeft) 
     {    //do nothing 
         //The videobrush orientation is currently right side up 
     } 
     if (e.Orientation == PageOrientation.Portrait) 
     { 
      //the videobrush is currently rotated 90 degrees counter clockwise 
      this.viewfinderTransform.Rotation = this.camera.Orientation + 90.0; 
     } 
     if (e.Orientation == PageOrientation.LandscapeRight) 
     { 
      //the videobrush is currently rotated 180 degrees counter clockwise 
      this.viewfinderTransform.Rotation = this.camera.Orientation + 180; 
     } 
    } 

Y después de agregar las sentencias if, la orientación del videograbado se vuelve aún más loca. ¿Qué estoy haciendo mal? Simplemente me gustaría que el video cepillo esté orientado hacia arriba independientemente de la orientación del teléfono.

+0

Hay algo más que sucede además de lo que está mostrando. El XAML (sin el código subyacente) funciona como esperarías en el emulador y en mi teléfono. Sin embargo, no estoy seguro de por qué está usando un 'VisualBrush' para pintar un' Rectangle', o proporcionando una transformación que centra un objeto 'UniformToFill'. –

+1

this.viewfinderTransform.Rotation = this.camera.Orientation; esto no funciona? – TutuGeorge

+0

@Ritch Solo estoy haciendo referencia a algunas fuentes de MSDN que he encontrado con respecto a pintar un objeto (rectángulo) con un videocepillo. En mi caso, UniformToFill funciona mejor porque no quiero diferencias en ancho y alto cuando giro mi teléfono entre vertical y horizontal (me he dado cuenta de que la imagen de la cinta de video se estira y aprieta mientras lo hago), y UniformToFill ofrece la misma perseverancia en todo el proceso. rotación del dispositivo. – Matthew

Respuesta

6

estoy usando un simple interruptor/caja para girar adecuadamente el VideoBrush:

protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
{ 
    base.OnOrientationChanged(e); 
    switch (e.Orientation) 
    { 
    case PageOrientation.Landscape: 
    case PageOrientation.LandscapeLeft: 
     videoBrushTransform.Rotation = 0; 
     break; 
    case PageOrientation.LandscapeRight: 
     videoBrushTransform.Rotation = 180; 
     break; 
    case PageOrientation.Portrait: 
    case PageOrientation.PortraitUp: 
     videoBrushTransform.Rotation = 90; 
     break; 
    case PageOrientation.PortraitDown: 
     videoBrushTransform.Rotation = 270; 
     break; 
    } 
} 

funciona muy bien para mí.

+0

exactamente lo que he usado :-) – noob

+0

gracias! solo quiero que lo necesite esta mañana! –

Cuestiones relacionadas