Für die Elemente einer Menüleiste sollten Bilder auf eine bestimmte Größe verkleinert und mit abgerundeten Ecken versehen werden. Um dies zu erreichen, wird im ersten Schritt ein GraphicsPath aufgebaut, der jenen Bereich des Ergebnisbildes darstellt, welcher nicht vom Bild überdeckt werden soll. Dieser Bereich setzt sich zusammen aus den vier untereinander verbundenen, abgerundeten Ecken. Dann wird das Ausgangsbild auf das Ergebnisbild kopiert. Abschließend werden die zuvor durch den GraphicsPath umschlossenen Eckbereiche in einer bestimmten Farbe übermalt.
Obenstehende Grafik zeigt ganz links das rechteckige Ausgangsbild, in der Mitte den Pfad, der die Ecken umschließt und rechts das Ergebnisbild mit den abgerundeten Ecken. Die im Folgenden angegebene Funktion RoundBitmap stellt eine Implementierung der beschriebenen Vorgehensweise dar:
Ein Beispielaufruf könnte wie folgt aussehen:
Umgehen der Dateisperre duch Laden von Grafiken
Lädt man eine Grafik über Bitmap.FromFile("C:\WINDOWS\Angler.bmp") aus einer Datei, dann wird diese Datei gesperrt. Als Folge kann die Datei so lange nicht gelöscht werden, bis die Anwendung beendet wird. Mit einem kleinen Trick kann man das Sperren der Datei jedoch verhindern. Dabei wird ein weiteres Bild auf Basis des aus der Datei geladenen Originalbildes erstellt und anschließend das Originalbild entladen.
Eine alternative Möglichkeit, die Dateisperre zu umgehen, liegt darin, die Daten aus der Bilddatei in einen Speicherstrom (Klasse System.IO.MemoryStream) zu schreiben und das Bildobjekt auf Basis der Daten im Speicherstrom zu instanzieren. Bei dieser Vorgehensweise ist darauf zu achten, daß das Schließen des Datenstroms erst dann erfolgen darf, wenn die auf dem Datenstrom basierende Grafik nicht mehr benötigt wird. Wird diese Regel nicht eingehalten, kann es zur Laufzeit zu Fehlern kommen, wenn .NET versucht, Bilddaten oder Metadaten aus der Datei zu lesen.
Mit der oben gezeigten Vorgehensweise lassen sich auch einfach Bilder aus einer Datenbank lesen oder in eine Datenbank schreiben. Zum Schreiben des Bildes in die Datenbank wird dieses über die Methode Save des Bildobjekts in einen Speicherstrom (MemoryStream) geschrieben. Anschließend kann man die Daten aus dem Speicherstrom mittels dessen ToArray-Methode in ein Bytearray umwandeln und dieses in der Datenbank persistieren. Das Konstruieren eines Bildes aus einem Bytearray folgt der im vorigen Listing gezeigten Vorgehensweise.
Auswerten des Klicks auf ein Gitter
Das folgende einfache Beispiel zeigt, wie man einen Raster auf ein Formular bzw. ein Steuerelement zeichnet und die vom Benutzer mit der Maus gewählte Zelle ermittelt. Das Beispiel zeichnet einen Raster mit einer Kästchengröße von 100 Pixeln in der Höhe und Breite. Zur Auswertung der Auswahl mit der Maus wird das Ereignis MouseUp behandelt und aus der Mausposition die Zeilen- und Spaltennummer des geklickten Kästchens ermittelt: