Comment puis-je obtenir le DPI dans WPF?
Comment puis-je obtenir le DPI dans WPF?
- Pourquoi auriez-vous besoin de le faire dans WPF, de toutes choses, et qu'allez-vous faire avec la valeur une fois que vous l'obtenir? WPF n'a aucun moyen de spécifier des coordonnées dans l'appareil dépendant de pixels. Il peut sembler que ses dimensions sont en pixels, mais ceux-ci sont "des pixels virtuels" - de la taille d'un pixel comme il est à 96 PPP. Il va grandir ou rétrécir si vous modifiez le système de DPI, donc une "d'un pixel d'épaisseur" de la ligne tracée à l'aide de WPF peut pas être physiquement d'un pixel d'épaisseur.
- Parce que je veux ronde pixels
- Si vous voulez pixel-positionnement précis au physique de pixel limites, vous êtes beaucoup mieux de ne pas l'utilisation de WPF dans la première place. Ce n'est pas le scénario pour lequel il est conçu, et il n'y a absolument aucune garantie quant à la manière dont WPF coordonnées peuvent être arrondis etc. Si vous voulez juste les sommets de se casser le plus proche de physique pixels, utilisez
UseLayoutRounding
de la propriété. Si vous voulez dessiner une ligne qui est exactement de 10 pixels de long, puis oublier de WPF. - N' "SnapToDevicePixels" pas de travail pour vous?
- SnapToDevicePixels ne fonctionne pas très bien. En fait, Microsoft a introduit UseLayoutRounding pour cette raison. Mais UseLayoutRounding est "tout ou rien". Vous ne pouvez pas le tour de certains de coordonnées, mais pas d'autres.
- Un des plus fréquemment utilisés scénario est de choisir le fichier de curseur avec la taille appropriée pour l'utilisation dans WPF. WPF ne supporte pas le multi-PPP curseur de fichiers, de sorte que vous aurez besoin de charger les fichiers de curseur en fonction de l'écran DPI. Le soutien va être ajouté dans .NET 4.6.
Vous devez vous connecter pour publier un commentaire.
http://blogs.msdn.com/jaimer/archive/2007/03/07/getting-system-dpi-in-wpf-app.aspx semble fonctionner
Avec .NET 4.6.2 d'Aperçu et de plus, vous pouvez appeler
VisualTreeHelper.GetDpi(Visual visual)
. Elle renvoie uneDpiScale
structure, qui vous indique la résolution à laquelle la donnéeVisual
sera ou a été rendue.VisualTreeHelper.GetDpi()
Le seul moyen que j'ai trouvé pour obtenir le "vrai" moniteur dpi est la suivante. Toutes les autres techniques citées juste dire 96 qui n'est pas correct pour la plupart des moniteurs.
Ici est une méthode qui repose sur la technologie Direct2D (pris en charge sur Windows Vista avec le service pack 2 et supérieur, et des serveurs), de sorte qu'il fonctionne bien en WPF (qui est fondée sur les mêmes motifs). Il utilise le ID2D1Factory::GetDesktopDpi méthode
Utilisation
GetDeviceCaps
fonction:C'est comment j'ai réussi à obtenir un "facteur d'échelle" dans WPF
Mon ordinateur portable, la résolution est de 1920 x 1440.
Il y a
https://blogs.windows.com/buildingapps/2017/01/25/calling-windows-10-apis-desktop-application/#FJtMAIFjbtXiLQAp.97
25 janvier 2017 3:54 pm
"L'appel de Windows 10 Api à Partir d'une Application de Bureau"
et
https://docs.microsoft.com/en-us/uwp/api/windows.devices.display.displaymonitor
"DisplayMonitor Classe"
Espace De Noms: Windows.Les appareils.Affichage Assemblies:Windows.Devices.Display.dll, Windows.dll
Fournit des informations sur un écran d'affichage de l'appareil connecté au système.
Ces données comprennent les informations fréquemment utilisées à partir de l'écran Extended Display Identification Data (EDID, qui est un standard de l'industrie de l'affichage descripteur de bloc que presque tous les moniteurs utilisent pour fournir des descriptions de modes pris en charge et l'appareil en général de l'information) et DisplayID (qui est une nouvelle norme de l'industrie qui fournit un sur-ensemble de l'EDID).
RawDpiX
Obtient la physique, horizontal DPI de l'écran (basé sur le moniteur résolution native et de la taille physique).
RawDpiY
Obtient la physique verticale DPI de l'écran (basé sur le moniteur résolution native et de la taille physique).
De base, moniteur les infos dans Windows à partir de 2006
https://docs.microsoft.com/en-us/windows/desktop/wmicoreprov/msmonitorclass
MSMonitorClass classe
WmiMonitorRawEEdidV1Block classe
WmiMonitorBasicDisplayParams classe
( Tailles dans EDID sont en centimètres et en millimètres en EDID Calendrier Détaillé Descripteur
12 Horizontal, image en taille, mm, 8 lsbits (0-4095 mm, 161)
13 Verticale de l'image de la taille, mm, 8 lsbits (0-4095 mm, 161)
14 Bits 7-4 Horizontale de l'image de la taille, mm, 4 msbits
Bits 3-0 Verticale de l'image de la taille, mm, 4 msbits
)
et
https://social.msdn.microsoft.com/Forums/vstudio/en-US/e7bb9384-b343-4543-ac0f-c98b88a7196f/wpf-wmi-just-get-an-empty-string