Pregunta

¿Existe otra forma de representar gráficos en C# más allá de GDI+ y XNA?

(Para el desarrollo de un editor de mapas en mosaico).

¿Fue útil?

Solución

SDL.NET es la solución que me encanta.Si necesita 3D encima, puede usar Tao.OpenGL para renderizar su interior.Es rápido, estándar de la industria (SDL, es decir) y multiplataforma.

Otros consejos

Sí, he escrito un control de Windows Forms que incluye DirectX 9.0 y proporciona manipulación directa a nivel de píxeles de la superficie del vídeo.

De hecho, escribí otra publicación sobre Stack Overflow preguntando si hay otros enfoques mejores: C# inseguro y punteros para renderizado 2D, ¿buenos o malos?

Si bien tiene un rendimiento relativamente alto, requiere la opción de compilador inseguro ya que utiliza punteros para acceder a la memoria de manera eficiente.De ahí el motivo de este post anterior.

Este es un alto nivel de los pasos requeridos:

  1. Descargue el SDK de DirectX.
  2. Crea un nuevo C# Formularios de Windows Proyecto y haga referencia al ensamblaje de Microsoft DirectX instalado.
  3. Inicialice un nuevo objeto de dispositivo DirectX con parámetros de presentación (ventana, búfer de retroceso, etc.) que necesita.
  4. Cree el dispositivo, teniendo cuidado de registrar la superficie "Pitch" y el modo de visualización actual (bits por píxel).
  5. Cuando necesites mostrar algo, Lock La superficie del backbuffer y almacena el puntero devuelto al inicio de la memoria de la superficie.
  6. Use la aritmética del puntero, calcule la posición real del píxel en los datos basados ​​en el tono superficial, bits por píxel y la coordenada de píxeles X/Y real.
  7. En mi caso, por simplicidad, me quedo con 32 bpp, lo que significa que configurar un píxel es tan simple como:*(surfacePointer + (y * tono + x))=Color.FromARGB(255,0,0);
  8. Cuando termine de dibujar, Unlock la superficie del amortiguador trasero.Presentar la superficie.
  9. Repita desde el paso 5 según sea necesario.

Tenga en cuenta que al adoptar este enfoque debe tener mucho cuidado al verificar el modo de visualización actual (paso y bits por pxiel) de la superficie de destino.También necesitará contar con una estrategia para lidiar con el cambio de tamaño de la ventana o los cambios de formato de la pantalla mientras se ejecuta el programa.

  • DirectX administrado (espacio de nombres Microsoft.DirectX) para gráficos 3D más rápidos.Es un contenedor .NET sólido sobre la API DirectX, que viene con un poco de rendimiento mejorado para crear objetos .NET y ordenar.A menos que esté escribiendo un motor 3D moderno con todas las funciones, funcionará bien.

  • Window Presentation Foundation (WPF) (espacio de nombres Windows.Media): la mejor opción para gráficos 2D.También tiene habilidades 3D limitadas.Su objetivo es reemplazar Windows Forms con un marco vectorial, acelerado por hardware e independiente de la resolución.Muy conveniente, admite varios tipos de controles personalizados, recursos, enlace de datos, eventos y comandos...También tiene algunos WTF.La velocidad suele ser más rápida que GDI y más lenta que DirectX, y depende en gran medida de cómo haces las cosas (he visto que algo funciona 60 veces más rápido después de reescribirlo de manera sensata).Tuvimos éxito al implementar 3 pantallas de 1280x1024 llenas de indicadores, gráficos y diagramas en tiempo real en una única (y no la mejor) PC.

Podrías intentar buscar en WPF, usando Visual Studio y/o Expression Blend.No estoy seguro de qué tan sofisticado estás tratando de ser, pero debería poder manejar un editor simple.Mira esto Artículo de MSDN para más información.

Podrías mirar en el Biblioteca de gráficos de El Cairo.El Mononucleosis infecciosa El proyecto tiene enlaces para C#.

El Cairo es una opción.Actualmente estoy reescribiendo mi software de mapeo usando GDI+ y Cairo.Tiene un generador de mapas de mosaicos, entre otras características.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top