Direct2D et High-DPI
L’écriture d’une application prenant en charge les ppp est la clé pour rendre une interface utilisateur (IU) toujours correcte sur un large éventail de paramètres d’affichage à haute résolution. Une application qui ne prend pas en charge les ppp, mais qui s’exécute sur un paramètre d’affichage à haute résolution peut souffrir de nombreux artefacts visuels, notamment une mise à l’échelle incorrecte des éléments d’interface utilisateur, du texte rogné et des images floues. En ajoutant la prise en charge dans votre application pour la sensibilisation aux PPP, vous rendez la présentation de l’interface utilisateur de votre application plus prévisible, ce qui la rend plus attrayante visuellement et plus facile à lire pour les utilisateurs. Heureusement, Direct2D facilite plus que jamais l’écriture d’applications qui fonctionnent bien en haute résolution. Cette rubrique contient les sections suivantes.
- Prise en charge de ppp élevés dans Direct2D
- Windows 8 et haute résolution
- Qu’est-ce qu’un DIP ?
- Rubriques connexes
Prise en charge de ppp élevés dans Direct2D
Direct2D fournit les fonctionnalités suivantes pour travailler avec des scénarios à haute résolution :
- Il respecte automatiquement le DPI système lors de la création d’une cible de rendu fenêtré, tant que le manifeste de l’application indique que l’application gère correctement DPI. (Pour plus d’informations sur la façon de déclarer que votre application prend en charge les ppp, consultez Comment s’assurer que votre application s’affiche correctement sur les affichages à haute résolution.)
- Il exprime les coordonnées en DIPs (Device Independent Pixels), ce qui permet à l’application de mettre à l’échelle automatiquement lorsque le paramètre DPI change.
- Il permet aux bitmaps d’avoir un DPI et de les mettre à l’échelle correctement en tenant compte de la ppp. Cette fonctionnalité peut également être utilisée pour gérer les icônes à différentes résolutions.
- Il exprime la plupart des ressources dans les DIPs, ce qui rend les ressources automatiquement indépendantes de la résolution.
- Il utilise un espace de coordonnées à virgule flottante et un anti-ataliasing, de sorte que tout contenu peut être mis à l’échelle sur n’importe quel DPI arbitraire.
Le pipeline graphique Direct2D est conçu pour effectuer une mise à l’échelle de 96 PPP à 1200 DPI.
Windows 8 et haute résolution
À compter de Windows 8, il existe des fonctionnalités supplémentaires pour la prise en charge des ppp élevés.
Si le DPI de contexte de l’appareil est suffisamment élevé, Direct2D modifie le seuil qu’il utilise pour activer l’anti-attirail vertical du texte. Cela permet d’accélérer le rendu du texte sur les affichages à haute résolution. En outre, vous pouvez basculer le mode unitaire en pixels au lieu des DIPs à l’aide de la méthode ID2D1DeviceContext::SetUnitMode . Si vous définissez le mode unitaire sur pixels et le DPI du contexte de l’appareil sur l’écran DPI, l’optimisation est toujours activée.
Qu’est-ce qu’un DIP ?
Un pixel indépendant de l’appareil (DIP) est un pixel logique qui est mappé aux pixels de l’appareil physique via un scalaire, le DPI. DPI signifie « dots per inch » (en français, PPP pour « points par pouce »), où un point représente un pixel d’appareil physique. (Cette nomenclature provient du secteur de l’impression, où les points sont le plus petit point d’encre qu’un processus d’impression peut produire). Étant donné qu’un moniteur standard avait 96 points par pouce, un PPP de 96 signifiait qu’un pixel indépendant de l’appareil (ou DIP) mappait 1:1 avec un pixel physique. Par exemple, si le DPI était 96*2 = 192, un seul DIP engloberait deux pixels physiques.
Il existe de nombreuses raisons pour lesquelles les applications ne gèrent pas nécessairement cette mise à l’échelle correctement ; l’une des raisons les plus simples est qu’il nécessite un travail supplémentaire pour découvrir et utiliser cette valeur scalaire lors du rendu. Dans Direct2D, la mise à l’échelle est appliquée par défaut. En raison de ce mappage, les pixels d’appareil physiques peuvent se retrouver à des coordonnées DIP fractionnaires, ce qui est l’une des raisons pour lesquelles Direct2D utilise un espace de coordonnées à virgule flottante.
- pixel physique = (dip × DPI) / 96
Pour convertir un pixel physique en DIP, utilisez la formule suivante :
- dip = (pixel physique × 96) / DPI
Notes
À partir de Windows 8, vous pouvez basculer le mode unitaire en pixels plutôt qu’en DIPs à l’aide de la méthode ID2D1DeviceContext::SetUnitMode.
Rubriques connexes
-
Comment s’assurer que votre application s’affiche correctement sur les affichages à haute résolution