Grafische Programmierung: Grundlagen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Templar.

    Grafische Programmierung: Grundlagen

    Hi,

    ich nehme bereits zum zweiten Mal an einem Informatikwettbewerb, nämlich der Intel-Leibniz-Challenge teil, und muss nun u.a. folgende Aufgabe lösen:

    Aufgabe 1d - Grafische Programmierung
    In diesem Unterpunkt steht die grafische Darstellung im Mittelpunkt. Diese unterscheidet
    sich wesentlich von der Textausgabe, da bei der Grafikausgabe das Setzen
    jedes einzelnen Bildpunktes (Pixel) in einer beliebigen Farbe möglich ist.

    • Erstelle ein Programm, das ein separates Programmfenster zur Grafikausgabe
    öffnet. Dein Programm soll in dem Programmfenster eine grafische Ausgabefläche
    (Zeichenfläche) mit einfarbigem Hintergrund in der Größe von
    640x480 Bildpunkten erzeugen.

    • Dein Programm soll nun das Logo der ILC 2009
    auf der Zeichenfläche erzeugen.

    Zur Erzeugung des Bildes dürfen jedoch ausschließlich drei Funktionen benutzt
    werden, die jeweils eine Linie, einen gefüllten Kreis bzw. ein gefülltes
    Rechteck in einer beliebigen Farbe auf der Zeichenfläche erzeugen:
    o DrawLine(Pen, X1, Y1, X2, Y2)
    o FillRectangle (Brush, X, Y, Width, Height)
    o FillEllipse (Brush, X, Y, Width, Height)
    Die Verwendung von anderen nicht-grafischen Funktionen zum Erzeugen von Effekten
    ist erlaubt.


    Nun habe ich aber keine Ahnung, wie man an die Sache rangehen soll. Ich weiß nur, dass man Visual Basic benutzten soll. Dazu hab ich Microsoft Visual Basic 2008 Express Edition.
    Aber wie geht es weiter? Ihr sollt mir natürlich nicht die komplette Aufgabe lösen, aber ich weiß nicht, wie ich anfangen soll. Kann ich das überhaupt mit einer Konsolenanwendung machen?
    Wie krieg ich das Programm dazu, überhaupt Grafiken auszuwerfen? Wenn ich jetzt einfach so eine der drei Funktionen verwenden will, wird die nichtmal von meiner Programmierumgebung erkannt.

    Wenn ihr mir erklären könntet, wie ich diese Funktionen einsetzte, sodass man dann tatsächlich auch was sehen kann, dann sollte ich den Rest eigentlich alleine schaffen. Eure Erklärung sollte aber sicherheitshalber ziemlich genau und idiotensicher sein!

    MfG
    Commander Piggy
    Die Drei Funktionen musst du mit der Graphicsklasse verwenden.

    Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim b As New Bitmap(200, 100) ' Das definiert ein neues Bitmap-objekt
    2. Dim g As Graphics = Graphics.FromImage(b) ' Hier wird ein Graphicsobjekt aus dem Bitmap erstellt
    3. g.FillRectangle(Brushes.Black, New Rectangle(50, 25, 100, 50)) ' Damit zeichnet man Rechtecke
    4. g.FillEllipse(Brushes.Red, New Rectangle(50, 25, 100, 50)) ' Damit eine Ellipse
    5. g.DrawLine(Pens.Black, 50, 25, 150, 75) ' Und damit eine Linie
    6. PictureBox1.image = b ' Hier wird das bitmap in einer Picturebox ausgegeben


    Hier werden alle drei Funktionen verwendet und das Ergebniss in einer Picturebox ausgegeben.

    gruß

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Templar“ ()

    Vielen Dank, ich denke ich habe kapiert, wie das nun funktionieren soll.
    Bloß wenn ich dieses Script jetzt so verwenden würde, will er, dass ich erstmal "Brushes" deklariere und "Bitmaps", "Graphics" sowieso "Rectangle" diefiniere. Wie soll ich das machen?
    Dann hab ich nur eine zusätzliche Fehlermeldung mehr. Meine komplette Konsolenanwendung sieht also nun so aus:
    Was müsste ich anders machen? Wie gesagt, es ist eine Erklärung auf unterstem Idioteniveau nötig!

    Quellcode

    1. Imports System.Drawing
    2. Module Module1
    3. Sub Main()
    4. Dim b As New Bitmap(200, 100)
    5. Dim g As Graphics = Graphics.FromImage(b)
    6. g.FillRectangle(Brushes.Black, New Rectangle(50, 25, 100, 50))
    7. g.FillEllipse(Brushes.Red, New Rectangle(50, 25, 100, 50))
    8. g.DrawLine(Pens.Black, 50, 25, 150, 75)
    9. PictureBox1.image = b
    10. End Sub
    11. End Module
    Den Code kannst du nur bei einer normalen Windows Forms Anwendung benutzen, da in einer Konsolenanwendung ja nur Text stehen kann.
    Aber (ich weiss nicht ob es geht) du kannst ja versuche mit Code eine normale Windows Form zu erstellen und das Bild dort anzeigen.

    Ich werds mal selber schnell versuchen. Meld mich dann wieder!

    gruß
    Vielen Dank. Nur habe ich noch nie mit solchen Forms Projekten gearbeitet... wozu brauche ich denn gleich einen ganzen Ordner voll Dateien dafür? Und wie öffne ich das jetzt überhaupt? Ich hab mal angenommen, ich muss die Datei außerhalb des Ordners zum Öffnen nehmen, die hätte auch den entsprechenden Namen, aber wenn ich das tue passiert herzlich wenig, außer dass da "Grafische_Oberfläche_TestProjekt" bei zuletzt geöffneten Projekten steht. Ich bin echt ratlos!?
    Hmm.. klick mal Grafische_Oberfläche_TestProjekt/Grafische_Oberfläche_TestProjekt.vbproj an. Das müsste gehn.

    Und Windows-Forms-Anwendungen sind nicht komplizierter oder sowas. Sie haben lediglich eine Grafische Oberfläche. Sie weichen im Code von den Konsolenanwendungen ein wenig ab, da verschiedene andere Funktionen, Namespaces usw. definiert sind. Aber vom Prinzip das selbe.

    gruß
    Dann kommt tatsächlich was, aber nur eine einzige Zeile, die da heißt:

    Quellcode

    1. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />



    Hmm... vielleicht wäre es einfacher, wenn du mir der Reihe nach sagst, was du gemacht hast. Aber bitte wirklich alles, wenn du ein Detail weglässt, würde ich wahrscheinlich wieder alles falsch machen.
    OK.

    Visual Studio öffnen -> Neues Projekt -> Windows Forms Anwendung -> Form1 im Projektmappenexplorer öffnen -> Picturebox aus der Toolbar auf die Form platzieren -> Doppelklick auf Form -> (Cursor lassen wo er ist) code einfügen -> F5 drücken.

    Code:

    VB.NET-Quellcode

    1. Dim b As New Bitmap(200, 100)
    2. Dim g As Graphics = Graphics.FromImage(b)
    3. g.FillRectangle(Brushes.Black, New Rectangle(50, 25, 100, 50))
    4. g.FillEllipse(Brushes.Red, New Rectangle(50, 25, 100, 50))
    5. g.DrawLine(Pens.Black, 50, 25, 150, 75)
    6. PictureBox1.Image = b


    gruß
    Ok, das hat ja jetzt tatsächlich funktioniert... jetzt kann ich also loslegen. Alle Zahlenangaben sind in Pixel, oder?

    Vielen Dank nochmal für alles.

    EDIT:

    Ach ja, und noch was:

    Erstelle ein Programm, das ein separates Programmfenster zur Grafikausgabe
    öffnet. Dein Programm soll in dem Programmfenster eine grafische Ausgabefläche
    (Zeichenfläche) mit einfarbigem Hintergrund in der Größe von
    640x480 Bildpunkten erzeugen.


    Wenn ich also folgendes schreibe:
    Dim b As New Bitmap(640, 480)

    Dann hab ich diese Bedingungen doch eingehalten? Sehe ich das richtig?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Commander Piggy“ ()

    Also ich habe jetzt selbst herrausgefunden, dass man eine Ellipse genauso wie ein Rechteck definieren muss (steht ja eigentlich auch im Code). Also man gibt praktisch Werte für ein imaginären Reckteck um die abzubildende Ellipse herum.

    Ok, mit den Informationen konnte ich jetzt die Aufgabe erfüllen und das Logo so darstellen wie es aussehen soll. Also ich habe praktisch den Code, aber wie mach ich daraus jetzt ein Programm?!
    In der Fragestellung steht ja, schreibe ein Programm, nicht schreibe einen Programmcode. Also wie kann ich das so abspeichern, dass daraus ein richtiges Programm wird?
    Das ist der einfache Teil. Du gehst auf Erstellen->[Projektname] erstellen. Dann findest du die Exe Datei im Order: [Projektpfad]/Bin/Release/[Projektname].exe.

    Aber wie bereits erwähnt, steht im "Aufgabentext" das du ein seperates Fenster aufmachen musst. Wenn du vllt. den Code hier posten könntest, könnte Ich ihn dir So "umbauen", dass das auch erfüllt wird.

    gruß