2009-08-19 11 views
14

Ich möchte nur einfache 2D-Objekte wie Kreis, Linie, Quadrat usw. in C# zeichnen. Wie mache ich das? Zurück in den Turbo C++ Tagen erinnere ich mich, einige Grafikbibliotheken für das gleiche zu initialisieren. Muss ich etwas Ähnliches in .NET machen? Ist das bei 3D-Objekten anders? Werden Dinge wie DirectX dies einfacher machen? Alle Links zu Tutorials oder Beispielen werden sehr geschätzt.Wie zeichne ich einfache Grafiken in C#?

Antwort

16

Wie andere gesagt haben, überprüfen System.Drawing. (Ich wiederhole das nur aus Gründen der Vollständigkeit.) System.Drawing macht die Windows-Zeichnungsbibliothekfür Ihre Anwendung verfügbar.

Ein gutes Tutorial, mit dem Sie mit System.Drawing und GDI + starten können, finden Sie unter C# Corner.

Einige wichtige Punkte zu beachten:

  1. Viele GDI + Objekte die IDisposable-Schnittstelle implementieren und sollten daher in using Blöcke gewickelt werden. Achten Sie darauf, dass Sie die entsprechenden Entsorgungskonventionen beachten; Wenn Sie keine GDI + -Objekte entsorgen, kann dies zu schwerwiegenden Nebenwirkungen für Ihre App führen. (GDI + -Objekte in .NET entsprechen ihren zugrunde liegenden Windows-API-Äquivalenten.)
  2. APIs wie DirectX sind äußerst komplex und aus gutem Grund. Sie sind nicht für einfache Formen gedacht, sondern für komplexe, hoch performante und hoch interaktive Multimedia-Anwendungen. (Mit anderen Worten, Spiele, in der Regel.) Sie können DirectX über die Managed DirectX-Schnittstellen zugreifen, aber auch hier ist es wahrscheinlich zu viel für Ihre direkten Zwecke.
  3. Wenn Sie an einer einfacheren Art der Arbeit mit DirectX interessiert sind, ist XNA der Weg zu gehen. Dies ist jedoch sehr viel eine Spiel-spezifische Bibliothek, und wieder ist es wahrscheinlich zu viel Overkill. Ich bin ein bisschen zu spät zur Party, aber nach den Kommentaren unten wird dies überhaupt nicht mehr unterstützt. (Das ergibt Sinn; ich habe seit Jahren nichts mehr davon gehört.
  4. )
+4

"Laut einer E-Mail vom 31. Januar 2013 ** wird XNA nicht mehr aktiv entwickelt ** und wird nicht unter den neuen Ebenen der Metro-Schnittstelle von Windows 8 oder auf der Windows RT-Plattform unterstützt." [Zitat aus Wikipedia] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Vielleicht sehen Sie [unity3d] (http://unity3d.com) es hat gute Tutorials und eine kostenlose Indie/persönliche Lizenz. Oder überprüfe das [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Ich empfehle nicht GDI + noch System.Drawing Ich bin hier, weil FillRectangle zu langsam ist, und es ruft langsam zugrunde liegende SafeNativeMethods GDI + (Gdip) FillRectangle zu langsam, um nützlich zu sein. Das ist 2017, und ich kämpfe gegen eine einfache FillRectangle-Standardfunktion, machst du Witze. – hamish

0

Blick auf die System.Drawing Namespace

0

Sie benötigen GDI + zu verwenden.

Wie Sie es tun, hängt leicht davon ab, was Sie zeichnen möchten. Sie können auf ein Steuerelement oder ein Formular zeichnen oder Sie können auf ein Bildobjekt zeichnen. In jedem Fall benötigen Sie ein System.Drawing.Graphics-Objekt, das sich meiner Meinung nach in System.Drawing.dll befindet.

Sie können eine neue Bitmap-Klasse instanziieren und Graphics.FromImage (myImage) aufrufen und dann mit den Methoden des gerade erstellten Graphics-Objekts zeichnen. Wenn Sie ein Formular oder Steuerelement zeichnen möchten, überschreiben Sie einfach die OnPaint-Methode und suchen Sie nach der Graphics-Eigenschaft für die EventArgs-Klasse.

Mehr Informationen über System.Drawing Namespace hier: http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

Sie können kein neues Bild instanziiert, aber Sie können eine neue Bitmap instanziiert. – MusiGenesis

+0

Ah ja, danke für die Klarstellung. Ich wusste das, aber vergaß es. –

2

Lesen Sie mehr über GDI, GDI +, System.Drawing Namespace, zum Beispiel here.
DirectX ist nicht etwas, das Sie verwenden würden, um einfache Formen zu zeichnen, sondern komplizierte 3D-Dinge zu rendern, auch wenn DX Api unter C# etwas kniffliger ist (obwohl nicht so schwer).

0

Suchen Sie nach Managed Direct3D Grafik-API in .NET Source

13

Hier ist ein einfaches Codebeispiel, das Sie den Einstieg erhalten (vorausgesetzt, dass Sie ein PictureBox namens PictureBox1 haben):

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); 
using (Graphics g = Graphics.FromImage(bmp)) 
{ 
    g.DrawLine(new Pen(Color.Red), 0, 0, 10, 10); 
} 
pictureBox1.Image = bmp; 

Die Grafik-Objekt eine Reihe von anderen Zeichenmethoden hat, und Intellisense werden Ihnen zeigen, wie man sie nennt.

0

GDI + mit System.Drawing