Bilder in Programmen
Den Einsatz von Bildern in C#-Programmen möchte ich an einem kleinen Projekt erläutern. Das oben gezeigte Programm stellt das Spiel Schere, Stein, Papier dar. Bei einem Klick auf den Button wird zufällig eines der Bilder für Schere, Stein oder Papier angezeigt. Bilder werden in C#-Anwendungen in einer PictureBox
dargestellt. Zunächst wird das Bildobjekt mit Image.FromFile()
von der Festplatte geladen. Anschließend kann es gesetzt werden, indem das Image
-Attribut auf das geladene Bildobjekt gesetzt wird.
private void btnSpielen_Click(object sender, EventArgs e) { Random rndZufallszahlengenerator = new Random(); int iZufallszahl = rndZufallszahlengenerator.Next(3); if (iZufallszahl == 0) { // Das Bild wird geladen... Image imgSchere = Image.FromFile("Bilder/Schere.png"); // und angezeigt. pbBild.Image = imgSchere; } else if (iZufallszahl == 1) { // Die beiden Schritte von oben können auch in // einem Schritt zusammengefasst werden. pbBild.Image = Image.FromFile("Bilder/Stein.png"); } else if (iZufallszahl == 2) { pbBild.Image = Image.FromFile("Bilder/Papier.png"); } }
Eigene Grafiken erstellen
Neben der bloßen Anzeige von Bildern, kann die PictureBox
auch dazu genutzt werden, um selbst darin zu malen. Wir nutzen dazu eine einfache Anwendung bestehend aus einer PictureBox
und einem Button
.
Bei einem Klick auf den Button werden ein rotes Rechteck und eine blaue Linie jeweils neu gezeichnet. Dabei wandern die beiden Objekte bei jedem Klick ein Stückchen weiter.
Die Akteure:
PictureBox
: Dies ist die Zeichenfläche, in der wir zeichnen.PaintEvent
: Ein Event, das ausgelöst wird, wenn diePictureBox
glaubt, neu gezeichnet werden zu müssen. Hier müssen wir aktiv werden und malen.Graphics
-Objekt: Damit zeichnen wir, sobald das Event ausgelöst wurde.- der
Button
: Wenn auf ihn geklickt wird, wird dieInvalidate
-Methode derPictureBox
aufgerufen. Damit wird indirekt dasPaintEvent
ausgelöst.
using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace PaintDemo { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } // Die linke obere Ecke der Figur. int iX = 0; int iY = 0; void PictureBox1Paint(object sender, PaintEventArgs e) { // Mit Hilfe des Graphics-Objektes wird gemalt Graphics g = e.Graphics; // Die Linie und das Rechteckt werden gezeichnet. // // Stiftfarbe (X1|Y1) (X2 | Y2) g.DrawLine(Pens.Blue, iX, iY, iX+50, iY+80); // Stiftfarbe (X|Y) Breite Höhe g.DrawRectangle(Pens.Red, iX, iY, 50, 80); } void Button1Click(object sender, EventArgs e) { // Erzwingt ein Repaint der PictureBox. Damit wird das // Paint-Event ausgelöst pictureBox1.Invalidate(); // Die Startkoordinaten werden verschoben iX += 1; iY += 1; } } }