Entwickler-Ecke

WinForms - List aus Image


Raven280438 - Fr 01.10.10 23:37
Titel: List aus Image
Hi,

ich zeichne in eine PictureBox viele kleine Bilder, ca. 32x32px, die sich auch oft wiederholen. Im Moment lade ich bei jeder Anzeige die Bilder neu aus einer Datei. Das dauert jetz bei ca. 100 Bilder schon ziemlich lange.

C#-Quelltext
1:
2:
Image img = Image.FromFile(verzeichnis + bild);
e.Graphics.DrawImage(img, punkt);


Damit ich die Bilder nicht immer neu aus den Dateien laden muss hab ich mir überlegt, sie in einer List zu speichern und bei Bedarf daraus zu laden. Ich hoffe das geht schneller.

Nur leider hab ich keine Ahnung wie ich das anstelle.
Wie kann ich prüfen, ob ein Image aus einer bestimmten Datei schon in der List existiert?

Ich hoffe mir kann jemand weiterhelfen.



Gruß


jaenicke - Fr 01.10.10 23:46

Du musst dir schon merken wo du welches Bild hineingeladen hast.

Die Dateinamen müssen ja auch in irgendeiner Liste stehen. Die geladenen Bilder könnten in der entsprechenden Liste einfach an der selben Stelle stehen.


Yogu - Sa 02.10.10 00:00

Du könntest einen Cache erstellen, in dem Bilder Dateinamen zugeordnet sind. Dafür gibt es die Klasse Dictionary<TKey, TValue>:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public class ImageCache {
  private Dictionary<string, Image> cache = new Dictionary<string, Image>();

  public Image GetImage(string fileName) {
    if (cache.Keys.Contains(fileName))
      return cache[fileName];
    else {
      Image image = Image.FromFile(fileName);
      cache.Add(fileName, image);
      return image;
    }
  }
}


danielf - Mo 04.10.10 07:35

Hallo,

eine solche Klasse gibt es im .NET Framework schon - heißt ImageCollection [http://msdn.microsoft.com/de-de/library/system.windows.forms.imagelist.imagecollection.aspx].

Gruß