Как я могу иметь свойство в классе для хранения изображения / изображения? - PullRequest
1 голос
/ 13 ноября 2009

Я хочу, чтобы у атрибута в моем классе 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 ]

4 голосов
/ 13 ноября 2009

В 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));

Вы можете использовать класс Image из System.Drawing.dll. Например:

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). Если у вас есть изображение в потоке (например, из базы данных или веб-службы, вы можете позвонить Image.FromStream(stream).

Если у вас есть все изображения во время компиляции, вы можете поместить их в файл ResX; Вы можете получить изображение из файла кода, сгенерированного дизайнером, например: myHero.Portrait = SomeResXFile.Portrait1.

3 голосов
/ 13 ноября 2009

Остерегайтесь запоминания, некоторые другие ответы могут привести к. Это правый объект данных, а не объект пользовательского интерфейса?

Знаете ли вы, что вам всегда понадобится изображение для жизни объекта? Я был бы обеспокоен поеданием памяти. Вероятно, лучше просто сохранить идентификатор ресурса (путь к файлу, имя в файле ресурсов и т. Д.) И передавать эту информацию только в блоки изображений. Я не предложил бы держаться за весь образ. По крайней мере, в winforms (не знаю, о WPF) сборщик мусора не так хорош при очистке изображений. Он видит их только как ссылку (то есть целое число), потому что остальная часть изображения в основном является неуправляемым объектом и думает, что это не высокий приоритет для сбора. Между тем, это может быть жевать мегабайты. Мы сгорели на моем предыдущем проекте.

0 голосов
/ 13 ноября 2009

Как насчет этого:

System.Drawing.Image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...