WPF Image change dynamiquement la source de L'Image pendant l'exécution

j'ai une fenêtre avec un titre sur. Lorsque l'utilisateur sélectionne un choix dans une liste déroulante, le titre de l'image peut changer. Le problème est que lorsque l'image est chargée, elle est floue, étirée et pixelisée. Ce sont des fichiers PNG avec lesquels je travaille et ils ont l'air bien avant de définir la source de manière dynamique.

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 une idée de ce qui se passe?

25
demandé sur Mogsdad 2008-12-29 07:12:22

6 réponses

je pense à 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 est avec le redimensionnement de L'image de WinForm, si l'image est étirée Stretch sur le contrôle d'image à "Uniform" ou "UnfirofmToFill".

deuxième option est que peut-être l'image n'est pas alignée à la grille de pixel, vous pouvez lire à ce sujet sur mon blog à http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx

26
répondu Nir 2008-12-29 08:51:09

Hey, c'est un peu moche mais c'est une seule ligne:

imgTitle.Source = new BitmapImage(new Uri(@"pack://application:,,,/YourAssembly;component/your_image.png"));
10
répondu Junior M 2009-09-11 21:25:23

Voici comment cela a fonctionné magnifiquement pour moi. Dans la fenêtre Ressources ajouter l'image.

   <Image x:Key="delImg" >
    <Image.Source>
     <BitmapImage UriSource="Images/delitem.gif"></BitmapImage>
    </Image.Source>
   </Image>

alors le code va comme ceci.

Image img = new Image()

img.Source = ((Image)this.Resources["delImg"]).Source;

"ce" fait référence à l'objet Window

4
répondu al. 2011-08-01 14:46:41

moi -> travail est:

string strUri2 = Directory.GetCurrentDirectory()+@"/Images/ok_progress.png"; image1.Source = new BitmapImage(new Uri(strUri2));

3
répondu yvisek 2011-03-08 16:23:55

Essayez Stretch="UniformToFill" sur l'Image

2
répondu Jobi Joy 2008-12-29 06:04:48
Me.imgAddNew.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/SPMS;component/Images/Cancel__Red-64.png", UriKind.Relative))
2
répondu Adnan Badar 2011-08-01 14:46:55