Jak mogę mieć w klasie nieruchomość do przechowywania zdjęcia/obrazu?


Chcę, aby atrybut mojej klasy bohatera miał atrybut portretu dla jego/jej obrazu. Jakiego typu obiektu powinienem użyć w takim przypadku?
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; }
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W WPF musisz użyć klasy
ImageSource
, na przykład:
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; }
}

Możesz odczytać obraz z pliku takiego jak ten:
myHero.Portrait = new BitmapImage(new Uri(filePath, UriKind.Absolute));

<strike>
Możesz użyć klasy
Image
z System.Drawing.dll. Na przykład:
</strike>
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; }
}

Aby załadować obraz, wywołaj
Image.FromFile (path)
. Jeśli masz obraz w strumieniu (na przykład z bazy danych lub usługi internetowej), możesz wywołać
Image.FromStream (stream)
.
Jeśli masz wszystkie obrazy w czasie kompilacji, możesz umieścić je w pliku ResX; możesz pobrać obraz z pliku kodu wygenerowanego przez projektanta, na przykład:
myHero.Portrait = SomeResXFile.Portrait1
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Uważaj na pamięć, do której mogą prowadzić niektóre inne odpowiedzi. To obiekt danych, prawda, a nie obiekt interfejsu użytkownika?
Czy wiesz na pewno, że zawsze będziesz potrzebować sposobu, aby przedmiot mógł żyć? Martwiłbym się pożarciem pamięci. Prawdopodobnie najlepiej jest po prostu zapisać identyfikator zasobu (ścieżkę do pliku, nazwę w pliku zasobów itp.) I przekazać te informacje tylko do pól graficznych. Nie radziłbym trzymać się całego obrazu. Przynajmniej w winforms (nie wiem jak o WPF) garbage collector nie jest zbyt dobry w czyszczeniu obrazów. Traktuje je tylko jako odniesienie (tj. Liczbę całkowitą), ponieważ reszta obrazu jest w zasadzie niezarządzanym obiektem i uważa, że ​​zbieranie nie ma wysokiego priorytetu. W międzyczasie może przeżuwać megabajty. Wypaliliśmy się na moim poprzednim projekcie na ten temat.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Co powiesz na to:
System.Drawing.Image
http://msdn.microsoft.com/en-u ... .aspx

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się