我怎样才能在课堂上有一个属性来存储图片/图像?

时间:2009-11-13 00:51:46

标签: c# wpf image

我想在我的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; }        
}

3 个答案:

答案 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)

小心内存占用其他一些答案可能会导致。这是一个数据对象权限,而不是UI对象吗?

您是否知道您将始终需要图像来保存物体的生命?我会担心吃掉记忆。最好只保留资源标识符(文件路径,资源文件中的名称等),并仅将该信息传递给图像框。我不建议坚持整个形象。至少在winforms中(不了解WPF)垃圾收集器在清理图像方面不是那么热门。它只将它们视为参考(即整数),因为图像的其余部分基本上是一个非托管对象,并认为它不是收集的高优先级。与此同时,它可能正在咀嚼兆字节。我们之前的一个项目被烧毁了。

答案 2 :(得分:0)

这个怎么样:

System.Drawing.Image