Partilhar via


Direct2D e High-DPI

Escrever um aplicativo com reconhecimento de DPI é a chave para fazer com que uma interface do usuário (UI) pareça consistentemente boa em uma ampla variedade de configurações de exibição de alto DPI. Um aplicativo que não reconhece DPI, mas está sendo executado em uma configuração de exibição de alto DPI, pode sofrer com muitos artefatos visuais, incluindo dimensionamento incorreto de elementos da interface do usuário, texto cortado e imagens borradas. 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 visualmente mais atraente e 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 alto. Este tópico contém as seguintes seções.

Suporte High-DPI em Direct2D

O Direct2D fornece os seguintes recursos para trabalhar com cenários de alto DPI:

  • Ele honra automaticamente o DPI do sistema ao criar um destino de renderização em janela, desde que o manifesto do aplicativo indique que o aplicativo manipula o DPI corretamente. (Para obter informações sobre como declarar que seu aplicativo reconhece DPI, consulte Como garantir que seu aplicativo seja exibido corretamente em High-DPI exibe.)
  • Ele expressa coordenadas em DIPs (Device Independent Pixels), o que permite que o aplicativo seja dimensionado automaticamente quando a configuração de DPI muda.
  • Ele permite que os bitmaps tenham um DPI e os dimensiona corretamente, levando o DPI em consideração. Este recurso também pode ser usado para manter ícones em diferentes resoluções.
  • Ele expressa a maioria dos recursos em DIPs, o que torna os recursos automaticamente independentes da resolução.
  • Ele usa um espaço de coordenadas de ponto flutuante e suavização de serrilhado, para que qualquer conteúdo possa ser dimensionado para qualquer DPI arbitrário.

O pipeline de gráficos Direct2D foi projetado para ser dimensionado de 96 DPI a 1200 DPI.

Windows 8 e High-DPI

A partir do Windows 8, há recursos adicionais para suporte a DPI alto.

Se o DPI de contexto do dispositivo for alto o suficiente, o Direct2D alterará o limite usado para habilitar a suavização vertical de texto. Isso resulta em renderização de texto mais rápida em monitores de alto DPI. Além disso, você pode alternar o modo de unidade para pixels em vez de DIPs usando o ID2D1DeviceContext::SetUnitMode método. Se você definir o modo de unidade como pixels e o DPI de contexto do dispositivo para o DPI da tela, a otimização ainda estará habilitada.

O que é um DIP?

Um pixel independente do dispositivo (DIP) é um pixel lógico que mapeia para os pixels do dispositivo físico através de um escalar, o DPI. DPI significa dots per inch, onde um ponto representa um pixel de dispositivo físico. (A nomenclatura vem da impressão, onde os pontos 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) mapeava 1:1 com um pixel físico. Por exemplo, se o DPI fosse 96*2 = 192, então um único DIP englobaria dois pixels físicos.

Há muitas razões pelas quais os aplicativos não necessariamente lidam com esse dimensionamento corretamente; Uma das razões mais simples é que 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 do dispositivo físico podem acabar em coordenadas DIP fracionárias, que é uma das razões pelas quais o Direct2D usa um espaço de coordenadas 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

Observação

A partir do Windows 8, você pode alternar o modo de unidade para pixels em vez de DIPs usando o métodoID2D1DeviceContext::SetUnitMode.

 

Como garantir que seu aplicativo seja exibido corretamente em High-DPI exibe