2009-08-19 6 views
14

Je veux juste dessiner des objets 2D simples comme un cercle, une ligne, un carré, etc. en C#. Comment je fais ça? De retour dans les jours Turbo C++ je me souviens d'avoir initialisé une bibliothèque graphique pour faire la même chose. Ai-je besoin de faire quelque chose de similaire dans .NET? Est-ce différent pour les objets 3D? Est-ce que des choses comme DirectX rendront cela plus facile? Tous les liens vers des tutoriels ou des échantillons très appréciés.Comment dessiner des graphismes simples en C#?

Répondre

16

Comme d'autres l'ont dit, consultez System.Drawing. (Je ne fais que répéter cela pour être complet.) System.Drawing expose la bibliothèque de dessin Windows GDI+ à votre application.

Un bon tutoriel pour vous aider à démarrer avec System.Drawing et GDI + peut être trouvé à C# Corner.

Certains éléments importants à noter:

  1. De nombreux objets GDI + implémentent l'interface IDisposable, et doivent donc être enveloppés dans using blocs. Assurez-vous de suivre les conventions d'élimination appropriées. ne pas disposer des objets GDI + peut entraîner des effets secondaires vraiment désagréables pour votre application. (Les objets GDI + dans .NET correspondent à leurs équivalents Windows API sous-jacents.)
  2. Les API telles que DirectX sont extrêmement complexes, et pour cause. Ils ne sont pas conçus pour des formes simples, mais plutôt pour des applications multimédias complexes, hautement performantes et hautement interactives. (En d'autres termes, les jeux, généralement.) Vous pouvez accéder à DirectX via les interfaces Managed DirectX, mais encore une fois, c'est probablement exagéré pour vos besoins directs. Si vous êtes intéressé par un moyen plus facile de travailler avec DirectX, XNA est la voie à suivre. Cependant, il s'agit d'une bibliothèque très spécifique au jeu, et elle risque d'être encore trop lourde. Je suis un peu en retard à la fête, mais d'après les commentaires ci-dessous, ce n'est plus du tout supporté. (Cela a du sens, je n'en ai pas entendu parler depuis des années.)
+4

"Selon un e-mail envoyé le 31 janvier 2013, ** XNA n'est plus en cours de développement ** et n'est pas supporté par les nouvelles couches" interface Metro "de Windows 8 ni par la plate-forme Windows RT." [Citation de Wikipedia] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Peut-être regarder [unity3d] (http://unity3d.com) il a de bons tutoriels et une licence gratuite indie/personnelle. Ou vérifier ceci [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Je ne recommande pas GDI + ni System.Drawing Je suis ici parce que FillRectangle est trop lent, et il appelle lentement sous-jacente SafeNativeMethods GDI + (Gdip) FillRectangle est trop lent pour être utile. Nous sommes en 2017, et je me bats contre une simple fonction standard FillRectangle, vous plaisantez. – hamish

0

Vous devez utiliser GDI +.

La façon dont vous le faites dépend légèrement de ce que vous voulez dessiner. Vous pouvez dessiner sur un contrôle ou un formulaire, ou vous pouvez dessiner sur un objet image. De toute façon, vous avez besoin d'un objet System.Drawing.Graphics qui, je crois, se trouve dans System.Drawing.dll.

Vous pouvez instancier une nouvelle classe Bitmap et appeler Graphics.FromImage (myImage), puis dessiner en utilisant les méthodes de l'objet Graphics que vous venez de créer. Si vous souhaitez dessiner sur un formulaire ou un contrôle, remplacez simplement la méthode OnPaint et recherchez la propriété Graphics sur la classe EventArgs.

Plus d'informations sur l'espace de noms System.Drawing ici: http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

Vous ne pouvez pas instancier une nouvelle image, mais vous pouvez instancier une nouvelle Bitmap. – MusiGenesis

+0

Ah oui, merci pour la clarification. Je le savais, mais j'ai oublié. –

2

Lire sur GDI, GDI +, espace de noms System.Drawing, par exemple here.
DirectX n'est pas quelque chose que vous utiliseriez pour dessiner des formes simples, mais plutôt pour rendre des choses 3D compliquées, aussi, en utilisant DX Api sous C# est un peu plus compliqué (mais pas si difficile).

0

Rechercher des Managed graphiques Direct3D API dans .NET Source

13

Voici un exemple simple de code qui vous initieront (suppose que vous avez un PictureBox nommé 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; 

objet graphique a un tas d'autres méthodes de dessin et IntelliSense vous montreront comment les appeler.

0

GDI + en utilisant System.Drawing

Questions connexes