J'ai une fenêtre avec un titre dessus. Lorsque l'utilisateur sélectionne un choix dans une liste déroulante, l'image du titre peut changer. Le problème est lorsque l'image se charge, elle est floue, étirée et pixellisée. Ce sont des fichiers PNG avec lesquels je travaille et ils ont l'air bien avant de définir dynamiquement la source.
Voici le code que j'utilise pour changer la source de l'image.
string strUri2 = String.Format(@"pack://application:,,,/MyAssembly;component/resources/main titles/{0}", CurrenSelection.TitleImage);
Stream iconStream2 = App.GetResourceStream(new Uri(strUri2)).Stream;
imgTitle.Source = HelperFunctions.returnImage(iconStream2);
Voici les fonctions d'assistance.
public static BitmapImage returnImage(Stream iconStream)
{
Bitmap brush = new Bitmap(iconStream);
System.Drawing.Image img = brush.GetThumbnailImage(brush.Height, brush.Width, null, System.IntPtr.Zero);
var imgbrush = new BitmapImage();
imgbrush.BeginInit();
imgbrush.StreamSource = ConvertImageToMemoryStream(img);
imgbrush.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
imgbrush.EndInit();
var ib = new ImageBrush(imgbrush);
return imgbrush;
}
public static MemoryStream ConvertImageToMemoryStream(System.Drawing.Image img)
{
var ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms;
}
Et le XAML
<Image x:Name="imgTitle" HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Column="1" Grid.Row="1" Stretch="None" d:IsLocked="False"/>
Et pour Ref:
xmlns:d="http://schemas.Microsoft.com/expression/blend/2008"
Quelqu'un a des idées quoi de neuf?
Je peux penser à deux choses:
Tout d'abord, essayez de charger l'image avec:
string strUri2 = String.Format(@"pack://application:,,,/MyAseemby;component/resources/main titles/{0}", CurrenSelection.TitleImage);
imgTitle.Source = new BitmapImage(new Uri(strUri2));
Peut-être que le problème vient du redimensionnement de l'image de WinForm, si l'image est étirée, réglez Stretch sur le contrôle d'image sur "Uniform" ou "UnfirofmToFill".
La deuxième option est que l'image n'est peut-être pas alignée sur la grille de pixels, vous pouvez en lire plus sur mon blog à l'adresse http://www.nbdtech.com/blog/archive/2008/11/20/blurred- images-in-wpf.aspx
Hé, celui-ci est plutôt laid mais c'est une seule ligne:
imgTitle.Source = new BitmapImage(new Uri(@"pack://application:,,,/YourAssembly;component/your_image.png"));
Voici comment cela a fonctionné magnifiquement pour moi. Dans la fenêtre les ressources ajoutent l'image.
<Image x:Key="delImg" >
<Image.Source>
<BitmapImage UriSource="Images/delitem.gif"></BitmapImage>
</Image.Source>
</Image>
Ensuite, le code va comme ceci.
Image img = new Image()
img.Source = ((Image)this.Resources["delImg"]).Source;
"this" fait référence à l'objet Window
Comme pour moi -> travailler c'est:
string strUri2 = Directory.GetCurrentDirectory()+@"/Images/ok_progress.png"; image1.Source = new BitmapImage(new Uri(strUri2));
Me.imgAddNew.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/SPMS;component/Images/Cancel__Red-64.png", UriKind.Relative))
Essayez Stretch = "UniformToFill" sur l'image