Direct2D e High-DPI
Escrever um aplicativo com reconhecimento de DPI é a chave para fazer com que uma interface do usuário pareça consistentemente boa em uma ampla variedade de configurações de exibição de alta DPI. Um aplicativo que não tem reconhecimento de DPI, mas está em execução em uma configuração de exibição de alta DPI, pode sofrer com muitos artefatos visuais, incluindo dimensionamento incorreto de elementos de interface do usuário, texto recortado e imagens desfocadas. Ao adicionar suporte em seu aplicativo para reconhecimento de DPI, você torna a apresentação da interface do usuário do aplicativo mais previsível, tornando-a mais atraente visualmente e mais fácil de ler para os usuários. Felizmente, o Direct2D torna mais fácil do que nunca escrever aplicativos que funcionam bem em DPI alta. Este tópico contém as seções a seguir.
- suporte High-DPI no Direct2D
- windows 8 e de Alta DPI
- O que é um DIP?
- tópicos relacionados
suporte High-DPI no Direct2D
O Direct2D fornece os seguintes recursos para trabalhar com cenários de alta DPI:
- Ele respeita automaticamente o DPI do sistema ao criar um destino de renderização em janelas, desde que o manifesto do aplicativo indique que o aplicativo manipula o DPI corretamente. (Para obter informações sobre como declarar que seu aplicativo tem reconhecimento de DPI, consulte How to Ensure That Your Application Displays Properly on High-DPI Displays.)
- Ele expressa coordenadas em DIPs (Pixels Independentes do Dispositivo), o que permite que o aplicativo seja dimensionado automaticamente quando a configuração de DPI for alterada.
- Ele permite que os bitmaps tenham um DPI e os dimensiona corretamente levando o DPI em conta. Esse recurso também pode ser usado para manter ícones em resoluções diferentes.
- Ele expressa a maioria dos recursos em DIPs, o que torna os recursos automaticamente independentes da resolução.
- Ele usa um espaço de coordenada de ponto flutuante e a suavização, de modo que qualquer conteúdo pode ser dimensionado para qualquer DPI arbitrária.
O pipeline de gráficos Direct2D foi projetado para dimensionar de 96 DPI para 1200DPI.
Windows 8 e High-DPI
A partir do Windows 8, há recursos adicionais para suporte a alta DPI.
Se o DPI de contexto do dispositivo for alto o suficiente, o Direct2D alterará o limite usado para habilitar a suavização vertical do texto. Isso resulta em renderização de texto mais rápida em exibições de DPI alta. Além disso, você pode alternar o modo de unidade para pixels em vez de DIPs usando o método ID2D1DeviceContext::SetUnitMode. Se você definir o modo de unidade como pixels e o DPI de contexto do dispositivo para o DPI de tela, a otimização ainda estará habilitada.
O que é um DIP?
Um dip (pixel independente do dispositivo) é um pixel lógico que mapeia para os pixels do dispositivo físico por meio de um escalar, o DPI. DPI significa pontos por polegada, em que um ponto representa um pixel de dispositivo físico. (A nomenclatura vem da impressão, onde os ponto são o menor ponto de tinta que um processo de impressão pode produzir). Como um monitor padrão costumava ter 96 pontos por polegada, um DPI de 96 significava que um pixel independente do dispositivo (ou DIP) mapeou 1:1 com um pixel físico. Por exemplo, se o DPI fosse 96*2 = 192, um único DIP englobaria dois pixels físicos.
Há muitos motivos pelos quais os aplicativos não lidam necessariamente com esse dimensionamento corretamente; um dos motivos mais simples é que ele requer trabalho extra para descobrir e usar esse valor escalar ao renderizar. No Direct2D, o dimensionamento é aplicado por padrão. Devido a esse mapeamento, os pixels de dispositivo físico podem acabar em coordenadas DIP fracionárias, que é um dos motivos pelos quais o Direct2D usa um espaço de coordenada de ponto flutuante.
- pixel físico = (dip × DPI) / 96
Para converter um pixel físico em um DIP, use esta fórmula:
- dip = (pixel físico × 96) / DPI
Nota
A partir do Windows 8, você pode alternar o modo de unidade para pixels em vez de DIPs usando o método ID2D1DeviceContext::SetUnitMode.
Tópicos relacionados