我想在我的Hero类中有一个属性为他/她的图像设置一个Portrait属性。在这种情况下我应该使用什么对象类型?
public class Hero
{
public string Name { get; set; }
public string HeroType { get; set; }
public int StartingHP { get; set; }
public int StartingMana { get; set; }
public Dictionary<string, string> Spells { get; set; }
public Dictionary<string, string> Items { get; set; }
}
答案 0 :(得分:4)
在WPF中,您应该使用ImageSource
类,如下所示:
public class Hero {
public string Name { get; set; }
public string HeroType { get; set; }
public int StartingHP { get; set; }
public int StartingMana { get; set; }
public Dictionary<string, string> Spells { get; set; }
public Dictionary<string, string> Items { get; set; }
public ImageSource Portrait { get; set; }
}
您可以从以下文件中读取图像:
myHero.Portrait = new BitmapImage(new Uri(filePath, UriKind.Absolute));
您可以使用System.Drawing.dll中的 Image
类。例如:
public class Hero {
public string Name { get; set; }
public string HeroType { get; set; }
public int StartingHP { get; set; }
public int StartingMana { get; set; }
public Dictionary<string, string> Spells { get; set; }
public Dictionary<string, string> Items { get; set; }
public Image Portrait { get; set; }
}
要加载图片,请致电Image.FromFile(path)
。如果您在流中有图像(例如,来自数据库或Web服务,则可以调用Image.FromStream(stream)
。
如果您在编译时拥有所有图像,则可以将它们放在ResX文件中;您可以从设计器生成的代码文件中获取图像,如下所示:myHero.Portrait = SomeResXFile.Portrait1
。 击>
答案 1 :(得分:3)
您是否知道您将始终需要图像来保存物体的生命?我会担心吃掉记忆。最好只保留资源标识符(文件路径,资源文件中的名称等),并仅将该信息传递给图像框。我不建议坚持整个形象。至少在winforms中(不了解WPF)垃圾收集器在清理图像方面不是那么热门。它只将它们视为参考(即整数),因为图像的其余部分基本上是一个非托管对象,并认为它不是收集的高优先级。与此同时,它可能正在咀嚼兆字节。我们之前的一个项目被烧毁了。
答案 2 :(得分:0)
这个怎么样: