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
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:
- 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.) - 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.)
Découvrez l'espace de noms System.Drawing: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
Regardez le System.Drawing Namespace
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
Vous ne pouvez pas instancier une nouvelle image, mais vous pouvez instancier une nouvelle Bitmap. – MusiGenesis
Ah oui, merci pour la clarification. Je le savais, mais j'ai oublié. –
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).
Rechercher des Managed graphiques Direct3D API dans .NET Source
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.
GDI + en utilisant System.Drawing
- 1. Meilleure solution pour des graphismes de jeu simples en C# /. Net
- 2. Graphiques simples en C# avec défaut System.Drawing
- 3. variables simples en Java et C++
- 4. Question sur la suppression des graphismes
- 5. Dessiner des graphiques avec Visual C++
- 6. Graphismes vectoriels dans iText PDF
- 7. Comment dessiner du texte en utilisant OpenGL, SDL et C++?
- 8. Utiliser des structures en C# pour des valeurs de domaine simples
- 9. Dessiner des tartes en utilisant PHP ImageMagick
- 10. Génération d'histogrammes simples de données entières en C#
- 11. Dessiner des caractères Unicode sur l'iPhone
- 12. Comment dessiner des polygones transparents avec Python?
- 13. C++/Qt: dessiner un caret
- 14. Comment dessiner des graphiques dans JSP
- 15. Façon facile facile de dessiner des graphiques et des graphiques en C++?
- 16. Comment pouvez-vous analyser de simples instructions typedef C++?
- 17. Comment dessiner un graphique en PHP?
- 18. Création d'objets objectifs-c de test simples
- 19. Dessiner des couleurs dans une zone d'image?
- 20. comment dessiner des dessins dans la boîte d'image
- 21. Générer des bitmaps et les dessiner
- 22. Traçage des données simples dans R
- 23. Comment dessiner avec un doigt ou l'iPhone
- 24. Comment faire pour échapper des guillemets simples dans MySQL
- 25. Comment utiliser innerHTML sur des fichiers txt simples dans Firefox?
- 26. Dessiner des graphiques dans VBScript
- 27. Java - comment faire correspondre regex Modèle contenant des guillemets simples?
- 28. Stockez les paramètres utilisateur simples en Python
- 29. Simulations simples pour la physique en Python?
- 30. Dessiner Arc en utilisant javascript
"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
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
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