Image Resize Aliasing dans WPF v4 mais pas sous v3.5
-
24-10-2019 - |
Question
J'utilise WPF pour un pipeline de redimensionnement d'image qui a travaillé magnifiquement sous .NET v3.5. Je viens de mettre le projet v4.0 cible et maintenant toutes mes images redimensionnées sont fortement crénelées. Aucun du code de conduite de l'image a changé.
-
a un paramètre de WPF par défaut changé entre v3.5 et v4.0?
-
Comment puis-je contrôler le tramage de mes images bitmap redimensionnées dans WPF?
J'utilise BitmapImage
, DrawingVisual
, DrawingContext
, RenderTargetBitmap
, BitmapEncoder
et BitmapFrame
mais je ne vois pas les propriétés liées à tramage. GDI + avait un tas de paramètres, donc je suppose que je manque quelque chose.
Mise à jour: il semble que toutes les solutions que j'ai vu supposer un objet de fenêtre ou de l'environnement XAML. Cela va à l'intérieur d'un service Windows qui n'a pas l'interface utilisateur. Je besoin d'un moyen d'influer sur ce paramètre programme.
je suis passé spécifiquement de GDI + pour WPF parce que GDI + a des fuites de mémoire dans la longue exécution de processus tels que les services et applications Web.
La solution
La seule façon que je suis en mesure d'influer sur le réglage de BitmapScalingMode
est d'hériter de la classe DrawingVisual
et réglez via son accesseur protégé:
// exposes BitmapScalingMode (also works for other protected properties)
public class MyDrawingVisual : DrawingVisual
{
public BitmapScalingMode BitmapScalingMode
{
get { return this.VisualBitmapScalingMode; }
set { this.VisualBitmapScalingMode = value; }
}
}
Si quelqu'un sait d'autre d'une meilleure façon de régler cela, je serais heureux d'entendre parler.
Il semble que cela fonctionnerait:
RenderOptions.SetBitmapScalingMode(myDrawingVisual, BitmapScalingMode.HighQuality);
... mais il ne fonctionne pas. Apparemment, étant en dehors du temps d'exécution fenêtrage XAML doit signifier qu'il ne peut pas définir les valeurs appropriées.
Autres conseils
Le BitmapScalingMode par défaut a été Fant dans la version 3.0, mais dans la version 4.0 est maintenant bilinéaire. Vous pouvez changer la valeur par défaut de plusieurs manières différentes. Un couple décrit ici .