Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se explica cómo configurar la resolución usada por los controles XAML de Win2D. Explica cómo:
- Hacer que los controles Win2D se ejecuten en una resolución fija.
- Ajuste el DPI de control para mejorar el rendimiento reduciendo la cantidad de píxeles renderizados.
Resolución y dimensionamiento del control
"Resolución", como se usa en este documento, es otra palabra para el tamaño de un mapa de bits. Consta de un ancho y un alto.
Los objetos a los que los controles XAML de Win2D dibujan poseen una resolución. Ellos también tienen un PPP. El PPP de un objeto es una medida de la densidad de los píxeles de ese objeto cuando se dibujan. DPI se comporta como un factor de escalado: un DPI alto aumenta el número de píxeles que componen el objeto dibujado. Por otro lado, reducir el PPP de un objeto significa que ocupará menos píxeles. Para obtener más información sobre la gestión de DPI (puntos por pulgada) de Win2D en general, consulta esta página.
A veces, el tamaño independiente de DPI se denomina "tamaño lógico". Y un tamaño dependiente del PPP, en píxeles, se denomina "tamaño físico".
En términos de resolución y ajuste de tamaño, el comportamiento predeterminado de un control cuando se carga es:
- El tamaño lógico del control viene determinado por su diseño, determinado por dónde cae en el árbol XAML.
- Se consulta un DPI en el entorno. El valor de PPP del control se establece en ese valor.
- La cantidad de píxeles físicos que componen el área dibujable del control viene determinada por el tamaño del control, escalado por su PPP.
- En una configuración de DPI alto, el tamaño físico será mayor (más píxeles) en comparación con el tamaño lógico.
- En puntos por pulgada bajos, el tamaño físico será más pequeño (menos píxeles) en comparación con el tamaño lógico.
- En ppp predeterminado, el tamaño físico y el tamaño lógico del área dibujable son los mismos.
- El recurso de dibujo del control (
CanvasImageSourceparaCanvasControl,CanvasVirtualImageSourceparaCanvasVirtualControlyCanvasSwapChainparaCanvasAnimatedControl) se ajusta para coincidir con el tamaño y DPI del control.
La mayoría de las operaciones de Win2D se realizan en dips (unidades independientes de PPP), y los recursos de dibujo de los controles XAML de Win2D se ajustan automáticamente para tener en cuenta el PPP. A menudo, esto significa que las aplicaciones pueden ignorar PPP. Los tamaños y las coordenadas siempre son independientes de PPP a menos que se especifique lo contrario. Una aplicación puede codificar de forma rígida varios tamaños y coordenadas en los que se dibujan elementos en los controles y ese contenido se escala cuando la aplicación se ejecuta en entornos con diferentes DCI.
Pero para algunas aplicaciones, el comportamiento predeterminado no es suficiente. En este artículo se describen dos escenarios en los que el valor predeterminado no es suficiente y qué aplicaciones pueden hacer para corregirlo.
Escenario: el contenido del control debe tener una resolución fija, inferior a la normal.
Este escenario puede surgir, por ejemplo, en un juego de sprite 2D que siempre debe representarse en una resolución fija de 640x480, independientemente del hardware de visualización real en el que se ejecute.
La resolución de esto no requiere estrictamente escribir ningún código Win2D nuevo.
El Viewbox objeto XAML te permite restringir los tamaños de sus elementos visuales secundarios, agregando automáticamente el escalado, con letterboxing o pillarboxing para conservar las relaciones de aspecto según sea necesario.
Simplemente asegúrese de que su CanvasControl, CanvasVirtualControl o CanvasAnimatedControl sea un elemento secundario de un ViewBox, y restrinja el tamaño de ese control.
Por ejemplo, para restringir el tamaño del control a 320 píxeles de ancho y 224 píxeles de alto, independientemente de PPP, en lugar de:
<canvas:CanvasAnimatedControl/>
Uso:
<Viewbox>
<canvas:CanvasAnimatedControl Width="320" Height="224"/>
</Viewbox>
Si la aplicación no debe conservar la relación de aspecto añadiendo barras negras o barras laterales, agregue el atributo Stretch:
<Viewbox Stretch="Fill">
<canvas:CanvasAnimatedControl Width="320" Height="224"/>
</Viewbox>
Tenga en cuenta que el escalado realizado por el Viewbox elemento no garantiza ningún control sobre el modo de interpolación. El método de filtrado puede ser como CanvasInterpolationMode.Linear o algo similar. Si la aplicación necesita un modo de interpolación determinado, no use ViewBox con un control de tamaño fijo. En su lugar, dibuje en un tamaño fijo intermedio CanvasRenderTargety use el modo de interpolación deseado para escalar y dibujar el intermedio hacia el destino.
Escenario: la aplicación no puede funcionar bien en resoluciones altas
Algunos dispositivos tienen pantallas de alta resolución, pero su unidad de procesamiento de gráficos no es lo suficientemente eficaz como para animar que muchos píxeles sin problemas. Es posible que los desarrolladores no conozcan fácilmente cómo funcionan sus aplicaciones en estos dispositivos sin probarlos.
Una opción es usar la propiedad DpiScale del control para reducir el DPI (PPP) del control.
Por ejemplo, para corregir el control a media resolución, use:
<canvas:CanvasAnimatedControl DpiScale="0.5" />
El factor de escala de PPP real depende de las necesidades de tu aplicación. Una opción es calcular un factor de escala que fijará el PPP de la aplicación en 96, y no más alto.
Por ejemplo:
float dpiLimit = 96.0f;
if(control.Dpi > dpiLimit)
{
control.DpiScale = dpiLimit / control.Dpi;
}
Para asegurarse de que esta configuración funcione a través de cambios de PPP, la aplicación debe suscribirse a DisplayInformation.DpiChanged y usar esta lógica en el controlador para ajustar la escala de PPP al nuevo valor.
Esto ahorra a la aplicación cierto sobrecoste de rendimiento, aprovechando que puede que los usuarios no perciban fácilmente la reducción de resolución en una pantalla de alta densidad de píxeles.
El escalado realizado al tener un recurso de control con resolución inferior a la nativa no puede garantizar el control sobre el modo de interpolación, similar a ViewBox mencionado anteriormente. Si la aplicación necesita un modo de interpolación determinado, use un intermedio en su lugar.