2010-03-10 6 views
1

J'ai un programme qui affiche une image, et l'utilisateur peut redimensionner l'image dans la fenêtre (par exemple en faisant rouler la molette de la souris). J'échelle de l'image d'un RenderTransform, comme ceci:Distorsion lors du redimensionnement/mise à l'échelle Image WPF

<Image x:Name="CurrentImage"> 
    <Image.RenderTransform> 
     <TransformGroup> 
      <TranslateTransform x:Name="Translate" X="0" Y="0"/> 
      <ScaleTransform x:Name="Scale" ScaleX="1" ScaleY="1"/> 
     </TransformGroup> 
    </Image.RenderTransform> 
</Image> 

Je viens de changer les ScaleX et ScaleY propriétés. L'image se redimensionne comme prévu.

Cependant, à certaines échelles, l'image est très déformée. En dessous d'environ 20% et au-dessus d'environ 80%, il s'affiche correctement, mais pour les résolutions intermédiaires, une partie ou la totalité de l'image est déformée. Voir les captures d'écran ci-dessous.

Un couple d'autres détails:

  • les 2 machines Windows XP J'ai essayé sur eu la même corruption, mais un ordinateur portable Windows 7 ne présentait pas le problème.
  • J'ai également essayé de remplacer le RenderTransform avec simplement la mise à l'échelle de l'image en utilisant les propriétés Height et Width, mais cela n'a fait aucune différence.
  • Toutes les images n'ont pas de problème, et celles qui le font le font parfois à des facteurs d'échelle différents. Les images plus grandes semblent être pires, mais je n'ai pas systématiquement mesuré.
  • .NET 3.5 et .NET 4 RC présentent tous les deux le comportement.

Quelqu'un at-il déjà vu ce comportement et avez-vous des commentaires?

A 20% de la taille originale:

alt text http://maylark.com/Scale20.png

à 26% de la taille originale:

alt text http://maylark.com/Scale26.png

à 41% de la taille originale:

alt text http://maylark.com/Scale41.png

à 64% de la taille originale:

alt text http://maylark.com/Scale64.png

à 80% de la taille originale:

alt text http://maylark.com/Scale80.png

+0

Pouvez-vous nous dire quel framework .NET vous utilisez. Y a-t-il aussi une limitation à la modification du cadre? –

+0

Je travaille dans .NET 3.5, mais juste essayé .NET 4 RC et il n'a pas fait de différence. –

Répondre

2

Après plusieurs heures passées à essayer d'isoler le problème, j'ai décidé de recommencer à zéro dans une nouvelle solution Visual Studio et de remettre les composants en place un par un. Tout fonctionnait dans la nouvelle solution, et finalement j'avais tous les cours et tout fonctionnait encore!

Il s'est avéré que la version non-fonctionnelle était multi-ciblée pour "Any CPU", mais la nouvelle solution ciblait "x86".

Apparemment, il y a un problème dans le sous-système graphique Windows XP x64 pour les programmes «Any CPU», parce que le passage à x86 ou à Vista/7 a résolu le problème.

J'ai posté ceci dans l'espoir que cela sauvera quelqu'un d'autre.

0

Beaucoup de WPF renderingbugs sont causé par vi pilotes deo, en particulier avec les cartes nVidia Quadro. Avez-vous essayé de mettre à jour vos pilotes?

+0

Le système principal sur lequel je travaille a une carte Quadro, mais j'ai également reproduit le problème sur une machine à cartes Matrox. Tous ont les derniers pilotes disponibles. Jusqu'à présent, le seul thème commun que je peux trouver est Windows XP et/ou DirectX 9c. –

0

Essayez d'éliminer les variables. Système d'exploitation, matériel et pilotes (comme indiqué dans la première réponse) et aussi les formats d'image que vous utilisez. Vous avez mentionné que toutes les images n'ont pas le problème? Y a-t-il des différences avec ces formats d'image? par exemple. Profondeur, couleur, etc. Vous pouvez également redimensionner les images dans un autre outil, par exemple IrfanView, et créer les mêmes problèmes.Cela pourrait aider à pointer vers un problème de pilote.

La façon dont les images sont rendues ressemble étrangement à ce que la foulée de l'image se faufile sous le capot.

+0

Merci pour l'aide. Il s'est avéré être un paramètre de construction, qui a apparemment exposé un bug dans certains sous-systèmes graphiques (voir ma propre réponse à la question). –