Howto : Grafik intern und extern laden

strammermax

Neuer User
Mitglied seit
6 Nov 2007
Beiträge
72
Punkte für Reaktionen
0
Punkte
0
Hallo miteinander,
hier jetzt eher etwas allgemeines : Das laden von Grafiken

Auf der Box und mit dem dort installierten .NET läuft es etwas anders ab, als im normalen Windowsbetrieb. Einige Funktionen sind dort schlichtweg nicht vorhanden, daher hier eine genaue Beschreibung.

Für Grafiken werden 2 zusätzliche Libarys benötigt :
Code:
using System.Drawing;
using System.IO;

Wie man ein Steuerelement auf der Form plaziert, haben wir im zugehörigen HowTo gesehen. Wie läd man nun Grafiken rein?


externe Grafik laden

Eine externe Grafik ist eine wacklige Geschichte und sollte doppelt und dreifach abgesichert werden. Bitte beachtet auch, das Pfadangaben relativ und absolut sein können. Bei der Thomsonbox fängt der Pfad mit einem \ an. Da Pfadangaben stets als String übergeben werden und \ in der Regel ein Steuerzeichen beschreibt, muss man anstelle von \ eben \\ verwenden und anstatt \\ (für Netzwerkangaben) \\\\.

Ich verwende folgende Grafik : \temp\tollesbild.jpg

Folgender Code ist mindestens nötig :

PictureBox pb = new PictureBox();
this.Controls.Add(pb);
pb.BringToFront();
pb.Image = new Bitmap("\\temp\\tollesbild.jpg");

Besser wäre jedoch noch eine Abfrage, ob die Datei existiert :
Code:
PictureBox pb = new PictureBox();
this.Controls.Add(pb);
pb.BringToFront();

String image = "\\temp\\tollesbild.jpg";

if (File.Exists(image))
{
     MessageBox.Show("Datei wurde nicht gefunden");
}
else
{
     pb.Image = new Bitmap(image);
}

Da jedoch gerade bei wackeligen Netzwerkverbindungen, instabilen NAS-Storage-Chipsätzen usw. auch mal Lesefehler auftreten, sollte man es noch in einen try/catch Block zwängen. Kurzinfo : Mit try-catch kann man ein Codesegment "versuchen" und im Zweifelsfall die Fehler in der Laufzeit "abfangen" (deshalb try/catch), ohne dass das Programm abstürzt.

Hier der perfekte Code :
Code:
PictureBox pb = new PictureBox();
            this.Controls.Add(pb);
            pb.BringToFront();

            String image = "\\temp\\tollesbild.jpg";

            if (!File.Exists(image))
            {
                MessageBox.Show("Datei wurde nicht gefunden");
            }
            else
            {
                try
                {
                    pb.Image = new Bitmap(image);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Beim Laden der Datei ist folgender Fehler aufgetreten : \n\n" + ex.Message);
                }
            }


interne Ressource als Grafik laden

Das ist natürlich um Welten einfacher. Erstens kann kein dummer Benutzer die Grafik "aus Versehen" löschen und zweitens sollten eigentlich keine Lesefehler auftreten. Falls doch ist es sowieso zu spät.

Zuerst fügen wir die Grafik als Ressource hinzu. Das geht umständlich über Projekt->Vorhandenes Element hinzufügen... ->Bild Datei auswählen oder viel einfacher, indem ihr die Grafik einfach in euren Projektordner zieht. Dort könnt ihr selbstverständlich auch Unterordner anlegen. Hier mal ein Bildchen :
screen6.JPG

Den Code kann ich leider selbst nicht ganz erklären, aber so gehts :

Code:
pb.Image = new Bitmap(this.GetType().Assembly.GetManifestResourceStream("test.testbild.jpg"));

bzw.

Code:
pb.Image = new Bitmap(this.GetType().Assembly.GetManifestResourceStream("test.images.toller_bg.jpg"));

wobei "test" eurem aktuellen Namespace entspricht, i.d.R. eurem Projektnamen!

Ich hoffe, ich konnts einigermaßen erklären. Viel Spaß!
 
Zuletzt bearbeitet:
War lange nich mehr hier, also erstmal guten Tag ;)
Du meinst sicher statt:

PHP:
if (File.Exists(image))
{
     MessageBox.Show("Datei wurde nicht gefunden");
}

PHP:
if (!File.Exists(image))
{
     MessageBox.Show("Datei wurde nicht gefunden");
}

Weil der Ausdruck den Fehler werfen soll, wenn die Datei nicht existiert.

Gruß
 
You got me!

Vielen Dank (hab das Teil garnicht getestet...)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.