Solo quiero dibujar objetos 2D simples como círculo, línea, cuadrado, etc. en C#. ¿Cómo puedo hacer eso? De vuelta en los días de Turbo C++, recuerdo haber inicializado una biblioteca de gráficos para hacer lo mismo. ¿Debo hacer algo similar en .NET? ¿Es diferente para los objetos 3D? ¿Cosas como DirectX lo harán más fácil? Cualquier enlace a tutoriales o muestras muy apreciadas.¿Cómo dibujo gráficos simples en C#?
Respuesta
Como han dicho otros, echa un vistazo a System.Drawing. (Solo lo repito por completo.) System.Drawing expone la biblioteca de dibujo de Windows GDI+ en su aplicación.
Un buen tutorial para que pueda comenzar con System.Drawing y GDI + se puede encontrar en C# Corner.
Algunos puntos importantes a tener en cuenta:
- Muchos objetos GDI + implementan la interfaz IDisposable, y por lo tanto deben ser envueltos en
using
bloques. Asegúrese de seguir las convenciones de eliminación apropiadas; no disponer de los objetos GDI + puede tener efectos secundarios desagradables para su aplicación. (Los objetos GDI + en .NET corresponden a sus equivalentes de API de Windows subyacentes). - Las API como DirectX son extremadamente complejas, y por buenas razones. Están diseñados no para formas simples, sino para aplicaciones multimedia complejas, de alto rendimiento y altamente interactivas. (En otras palabras, juegos, por lo general.) Puede acceder a DirectX a través de las interfaces de Managed DirectX, pero una vez más, es probable que sea excesivo para sus propósitos directos.
- Si está interesado en una forma más fácil de trabajar con DirectX, XNA es el camino a seguir. Sin embargo, esto es en gran medida una biblioteca específica para juegos, y de nuevo es probable que sea exagerado. Llego un poco tarde a la fiesta, pero según los comentarios a continuación, ya no se admite. (Esto tiene sentido, no he escuchado nada al respecto en años.)
Salida del espacio de nombres System.Drawing: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
Mira el espacio de nombres System.Drawing
Es necesario utilizar GDI +.
Cómo lo hace depende ligeramente de lo que desea dibujar. Puede dibujar en un control o un formulario, o puede dibujar en un objeto de imagen. De cualquier manera, necesita un objeto System.Drawing.Graphics que creo que se encuentra en System.Drawing.dll.
Puede instanciar una nueva clase de mapa de bits y llamar a Graphics.FromImage (myImage), y luego dibujar usando los métodos en el objeto Graphics que acaba de crear. Si desea dibujar en un formulario o control, simplemente anule el método OnPaint y busque la propiedad Graphics en la clase EventArgs.
Más información sobre System.Drawing espacio de nombres aquí: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
No se puede crear una instancia de una nueva imagen, pero se puede crear una instancia de un nuevo mapa de bits. – MusiGenesis
Ah sí, gracias por la aclaración. Lo sabía, pero lo olvidé. –
Leer acerca de GDI, GDI +, System.Drawing espacio de nombres, por ejemplo here.
DirectX no es algo que usarías para dibujar formas simples, en lugar de hacer cosas complicadas en 3D, también, usar DX Api bajo C# es un poco más complicado (aunque no tan difícil).
Busque administrados Direct3D gráficos API en .NET Source
Aquí está un ejemplo de código simple que le ayudará a comenzar (se supone que tiene un cuadro de imagen llamado 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;
el objeto Graphics tiene un montón de otros métodos de dibujo, y Intellisense le mostrará cómo llamarlos.
GDI + usando System.Drawing
- 1. gráficos de dibujo en Django
- 2. La mejor solución para gráficos de juegos simples en C# /. Net
- 3. Qt/C++: dibujo eficientemente
- 4. C# Dibujo en Paneles
- 5. C# Gráficos n Gráficos
- 6. Gráficos de C# parpadeando
- 7. ¿Por qué el dibujo en gráficos OnPaint es más rápido que los gráficos de imagen?
- 8. Mejor API para gráficos 2D simples con Java
- 9. Gráficos en ASP.Net (C#)
- 10. Cómo cambiar el orden de los paneles en los gráficos de celosía simples
- 11. ¿Qué herramientas de diseño, edición y dibujo de gráficos hay?
- 12. Gráficos en C# (.NET)
- 13. ¿Qué es una buena API de dibujo de gráficos 2D para Windows/C++?
- 14. simples C# WebSockets servidor
- 15. Java: crea gráficos sin awt?
- 16. Gráficos de representación en C#
- 17. ¿Cómo dibujo texto con GLUT/OpenGL en C++?
- 18. creando cookies simples en asp.net C#
- 19. Cuándo usar extern "C" en palabras simples?
- 20. variables simples en Java y C++
- 21. ¿Analizar archivos MIME simples de C/C++?
- 22. El dibujo de UIKit es seguro para subprocesos: ¿cómo se obtiene un contexto de gráficos?
- 23. Gráficos de Excel + C#
- 24. C#: ¿Cómo hago matemáticas simples, con redondeo, en enteros?
- 25. Cómo trazar gráficos en Gnuplot en tiempo real en C++?
- 26. Dibujo en C# mapa de bits con C++
- 27. Biblioteca de dibujo fácil de usar en c/C++?
- 28. ¿Qué es un buen marco de gráficos 2D para una aplicación de dibujo?
- 29. Biblioteca de dibujo multiplataforma
- 30. Dibujo multiproceso en .NET?
"Según un correo electrónico enviado el 31 de enero de 2013, ** XNA ya no se está desarrollando activamente **, y no es compatible con las nuevas capas de" interfaz Metro "de Windows 8 ni con la plataforma Windows RT." [Cita de Wikipedia] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas
Tal vez mire [unity3d] (http://unity3d.com) tiene buenos tutoriales y una licencia gratuita indie/personal. O mira esto [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas
No recomiendo GDI + ni System.Drawing Estoy aquí porque FillRectangle es demasiado lento, y Lentamente llama a SafeNativeMethods GDI + (Gdip) FillRectangle waay demasiado lento para ser útil. esto es 2017, y estoy luchando contra una simple función estándar FillRectangle, ¿me estás tomando el pelo? – hamish