在WPF项目中,我需要从本地资源设置ImageSource属性。 我正在尝试使用以下代码:
var bmp = new BitmapImage();
bmp.BeginInit();
bmp.UriSource = new Uri("pack://application:,,,/Resources/Identicons/no_user.jpg", UriKind.Absolute);
bmp.EndInit();
Avatar = bmp;
之前定义的头像为:
private ImageSource myAvatar;
问题是BitmapImage不支持源图像具有的MetaData信息(它是使用Paint.net创建的),因此它会抛出错误。错误如下:
Metadata ='bmp.Metadata'引发了类型异常 的 'System.NotSupportedException'
所以我相信我需要BitmapImage的替代品来正确加载所需的图像。
作为结束语,在xaml中使用相同的图像,直接在“source”属性中,它可以正常工作。 谢谢
答案 0 :(得分:0)
当你有图像的路径时,可以通过下面的图像控制
来完成<Image>
<Image.Source>
<BitmapImage UriSource="{Binding ImagePath}"></BitmapImage>
</Image.Source>
</Image>
public ViewerViewModel()// Constructor
{
ImagePath = @"..\Images\Untitled.jpg";// Change the image path based on your input.
}
private string _ImagePath = string.Empty;
public string ImagePath {
get { return _ImagePath; }
set { _ImagePath = value; NotifyPropertyChanged(); }
}
答案 1 :(得分:0)
与BitmapImage
不同,BitmapFrame
支持Metadata
属性:
所以你可以替换
Avatar = new BitmapImage(new Uri(...));
通过
Avatar = BitmapFrame.Create(new Uri(...));
来自MSDN:
BitmapFrame提供未定义的其他功能 BitmapSource ... BitmapFrame还支持元数据的写入 使用Metadata属性或的信息 CreateInPlaceBitmapMetadataWriter方法。
答案 2 :(得分:0)
问题解决了。 这是在具有属性的类中:
private ImageSource myAvatar;
....
public ImageSource Avatar
{
set { myAvatar = Avatar; }
get { return myAvatar; }
}
我正在尝试更改“阿凡达”(通过该设置设置myAvatar)。 我不明白为什么,但直接改变myAvatar的作品。例如:
BitmapSource image = BitmapFrame.Create(new Uri("pack://application:,,,/Resources/Identicons/no_user.jpg", UriKind.Absolute));
myAvatar = image;
没关系,但是:
BitmapSource image = BitmapFrame.Create(new Uri("pack://application:,,,/Resources/Identicons/no_user.jpg", UriKind.Absolute));
Avatar = image;
始终将“头像”设置为null。 这是一个类中的方法。我很高兴理解为什么我不清楚。谢谢。