Изображение WPF Динамическое изменение источника изображения во время выполнения
У меня есть окно с заголовком. Когда пользователь выбирает выбор из выпадающего списка, изображение заголовка может измениться. Проблема заключается в том, что изображение загружается, оно размыто, растянуто и неровно. Это PNG файлы, с которыми я работаю, и они хорошо смотрятся до установки источника динамически.
Вот код, который я использую для изменения источника изображения.
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);
Вот вспомогательные функции.
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;
}
И XAML
<Image x:Name="imgTitle" HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Column="1" Grid.Row="1" Stretch="None" d:IsLocked="False"/>
И для Ref:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
У кого-нибудь есть идеи, что?
Ответы
Ответ 1
Я могу думать о двух вещах:
Сначала попробуйте загрузить изображение:
string strUri2 = String.Format(@"pack://application:,,,/MyAseemby;component/resources/main titles/{0}", CurrenSelection.TitleImage);
imgTitle.Source = new BitmapImage(new Uri(strUri2));
Возможно, проблема заключается в изменении размера изображения в WinForm, если изображение растянуто, установите Stretch на элементе управления изображением на "Uniform" или "UnfirofmToFill".
Второй вариант заключается в том, что, возможно, изображение не выровнено по сетке пикселей, вы можете прочитать об этом в моем блоге http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx
Ответ 2
Эй, это одно уродливое, но только одна строка:
imgTitle.Source = new BitmapImage(new Uri(@"pack://application:,,,/YourAssembly;component/your_image.png"));
Ответ 3
Вот как это прекрасно работало для меня.
В окне ресурсов добавьте изображение.
<Image x:Key="delImg" >
<Image.Source>
<BitmapImage UriSource="Images/delitem.gif"></BitmapImage>
</Image.Source>
</Image>
Затем код будет выглядеть следующим образом.
Image img = new Image()
img.Source = ((Image)this.Resources["delImg"]).Source;
"this" ссылается на объект Window
Ответ 4
Мне нравится → работа:
string strUri2 = Directory.GetCurrentDirectory()[email protected]"/Images/ok_progress.png";
image1.Source = new BitmapImage(new Uri(strUri2));
Ответ 5
Попробуйте Stretch = "UniformToFill" на изображении
Ответ 6
Me.imgAddNew.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/SPMS;component/Images/Cancel__Red-64.png", UriKind.Relative))