2009-08-19 14 views
14

Voglio solo disegnare semplici oggetti 2D come cerchio, linea, quadrato ecc in C#. Come lo faccio? Tornando ai giorni Turbo C++ ricordo di aver inizializzato alcune librerie grafiche per fare lo stesso. Devo fare qualcosa di simile in .NET? È diverso per gli oggetti 3D? Cose come DirectX renderanno tutto più semplice? Qualsiasi link a tutorial o campioni molto apprezzato.Come disegno una grafica semplice in C#?

risposta

16

Come altri hanno detto, check out System.Drawing. (Lo sto solo ripetendo per completezza.) System.Drawing espone la libreria di disegni di Windows GDI+ alla tua applicazione.

Un buon tutorial per jump-iniziato con System.Drawing e GDI + può essere trovato alla C# Corner.

Alcuni elementi importanti da notare:

  1. Molti GDI + oggetti implementano l'interfaccia IDisposable, e pertanto devono essere avvolti in using blocchi. Assicurati di seguire le convenzioni di smaltimento appropriate; non riuscire a smaltire oggetti GDI + può causare effetti collaterali davvero sgradevoli per la tua app. (Gli oggetti GDI + in .NET corrispondono ai corrispondenti equivalenti dell'API di Windows.)
  2. Le API come DirectX sono estremamente complesse e per una buona ragione. Sono progettati non per forme semplici, ma per applicazioni multimediali complesse, altamente performanti e altamente interattive. (In altre parole, i giochi, in genere.) È possibile accedere a DirectX tramite le interfacce DirectX gestite, ma, di nuovo, è probabilmente eccessivo per i propri scopi diretti.
  3. Se sei interessato a un modo più semplice per lavorare con DirectX, XNA è la strada da percorrere. Tuttavia, questa è una libreria molto specifica per il gioco e, di nuovo, rischia di essere eccessiva. Sono un po 'in ritardo per la festa, ma secondo i commenti qui sotto, questo non è più supportato affatto. (Questo ha senso, non ne ho sentito parlare da anni.)
+4

"In base a un'e-mail inviata il 31 gennaio 2013, ** XNA non è più in fase di sviluppo ** e non è supportato dai nuovi livelli" Interfaccia Metro "di Windows 8 né dalla piattaforma Windows RT." [Citazione da Wikipedia] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Forse guardate [unity3d] (http://unity3d.com) ha buoni tutorial e una licenza indie/personale gratuita. Oppure controlla questo [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Non consiglio GDI + né System.Drawing Sono qui perché FillRectangle è troppo lento, e chiama lentamente sottostante SafeNativeMethods GDI + (Gdip) FillRectangle waay troppo lento per essere utile. questo è il 2017, e sto combattendo contro una semplice funzione standard FillRectangle, mi stai prendendo in giro. – hamish

0

sguardo al System.Drawing Namespace

0

È necessario utilizzare GDI +.

Il modo in cui lo fai dipende leggermente da ciò su cui desideri disegnare. È possibile disegnare su un controllo o un modulo oppure è possibile disegnare su un oggetto immagine. In entrambi i casi, è necessario un oggetto System.Drawing.Graphics che credo si trovi in ​​System.Drawing.dll.

È possibile creare un'istanza di una nuova classe Bitmap e chiamare Graphics.FromImage (myImage), quindi disegnare utilizzando i metodi sull'oggetto Graphics appena creato. Se vuoi disegnare su un modulo o su un controllo, basta eseguire l'override del metodo OnPaint e cercare la proprietà Graphics nella classe EventArgs.

Maggiori informazioni sul System.Drawing namespace qui: http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

Non è possibile creare un'istanza di una nuova immagine, ma è possibile creare un'istanza di una nuova bitmap. – MusiGenesis

+0

Ah si, grazie per il chiarimento. Lo sapevo, ma ho dimenticato. –

2

Leggi su GDI, GDI +, System.Drawing spazio dei nomi, ad esempio here.
DirectX non è qualcosa che si userebbe per disegnare forme semplici, piuttosto per renderizzare cose 3D complicate, inoltre, usare DX Api sotto C# è un po 'più complicato (anche se non così difficile).

0

Cercare Managed grafica Direct3D API in .NET Source

13

Ecco un esempio di codice semplice che vi consentiranno di iniziare (presuppone una PictureBox chiamato pictureBox1):

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; 

La grafica oggetto ha un mucchio di altri metodi di disegno, e Intellisense vi mostrerà come chiamarli

0

GDI + utilizzando System.Drawing