2009-08-19 26 views
14

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

16

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:

  1. 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).
  2. 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.
  3. 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.)
+4

"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

+0

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

+0

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

0

Mira el espacio de nombres System.Drawing

0

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

+0

No se puede crear una instancia de una nueva imagen, pero se puede crear una instancia de un nuevo mapa de bits. – MusiGenesis

+0

Ah sí, gracias por la aclaración. Lo sabía, pero lo olvidé. –

2

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).

0

Busque administrados Direct3D gráficos API en .NET Source

13

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.

0

GDI + usando System.Drawing