169 votes

Mes images sont floues! Pourquoi les SnapsToDevicePixels de WPF ne fonctionnent-ils pas?

J'utilise des images dans mon application WPF.

XAML:

 <Image Name="ImageOrderedList"
       Source="images/OrderedList.png"
       ToolTip="Ordered List"
       Margin="0,0,5,5"
       Width="20"
       Height="20"
       SnapsToDevicePixels="True"
       MouseUp="Image_MouseUp"
       MouseEnter="Image_MouseEnter"
       MouseLeave="Image_MouseLeave" />
 

Mais, ils semblent flous:

Images floues de WPF

Voici une comparaison côte à côte. Un original est à gauche:

Image floue de WPF Zoomée

Pourquoi cette ligne SnapsToDevicePixels="True" n'empêche-t-elle pas ce problème?

255voto

Domokun Points 1450

Vous souhaitez peut-être envisager d'essayer un nouveau bien, maintenant disponible dans WPF4. Quitter l' RenderOptions.BitmapScalingMode de haute Qualité ou tout simplement ne pas la déclarer.

NearestNeighbor a fonctionné pour moi sauf qu'il a conduit à surprenant bitmaps en zoomant sur l'application. Il ne semble pas résoudre des problèmes où les icônes ont été dimensionnement étranges manières.

Sur votre élément racine (c'est à dire votre fenêtre principale) ajouter cette propriété: UseLayoutRounding="True".

Une propriété auparavant uniquement disponibles dans Silverlight a maintenant fixé tous les Bitmap dimensionnement des malheurs. :)

79voto

Zack Peterson Points 19350

Plutôt que d'utiliser SnapsToDevicePixels , j'ai plutôt utilisé RenderOptions.BitmapScalingMode et ils sont maintenant beaux et nets!

XAML:

 <Image Name="ImageOrderedList"
       Source="images/OrderedList.png"
       ToolTip="Ordered List"
       Margin="0,0,5,5"
       Width="20"
       Height="20"
       RenderOptions.BitmapScalingMode="NearestNeighbor"
       MouseUp="Image_MouseUp"
       MouseEnter="Image_MouseEnter"
       MouseLeave="Image_MouseLeave" />
 

Voici comment ça se passe maintenant:

Images croustillantes WPF

23voto

DK. Points 1543

+1 pour Zack Peterson

J'utilise .Net 3.5 sp1 et cela ressemble à la solution la plus simple pour un grand nombre d'images floues. Il n'est pas très important de spécifier RenderOptions sur place, mais pour les composants tiers, un style dans une ressource au niveau de l'application a du sens:

  <Style TargetType="{x:Type Image}">
    <Setter
        Property="RenderOptions.BitmapScalingMode"
        Value="NearestNeighbor" />
 </Style>
 

Travaillé bien lorsque AvalonDock a commencé à rendre des icônes floues.

10voto

Omid B. Points 140

À l'aide de l' UseLayoutRounding="True" sur la Fenêtre racine dans de nombreux cas, mais j'ai rencontré un problème lors de l'utilisation de la WPF Ruban de contrôle. Mon application s'appuie sur les Onglets Contextuels qui apparaissent en fonction de ce que l'utilisateur est en train de faire et quand je l' UseLayoutRounding de True, l'onglet contextuel ne serait pas de se montrer et de le RibbonButton l'image de ni. Aussi, l'application se bloque pendant plusieurs secondes et le ventilateur du CPU se met à chanter.

À l'aide de RenderOptions.BitmapScalingMode="NearestNeighbor" sur mon image corrigée le rendu de l'image de questions (floue et recadrée de l'image) et est entièrement compatible avec le Ruban Onglets Contextuels d'utilisation.

6voto

ezolotko Points 501

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X