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
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:
- 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.) - 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.
- 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.)
Partenza spazio dei nomi System.Drawing: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
sguardo al System.Drawing Namespace
È 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
Non è possibile creare un'istanza di una nuova immagine, ma è possibile creare un'istanza di una nuova bitmap. – MusiGenesis
Ah si, grazie per il chiarimento. Lo sapevo, ma ho dimenticato. –
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).
Cercare Managed grafica Direct3D API in .NET Source
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
GDI + utilizzando System.Drawing
"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
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
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