¿API de dibujo 2D rápida y con precisión de píxeles para aplicaciones de gráficos?

StackOverflow https://stackoverflow.com/questions/67000

  •  09-06-2019
  •  | 
  •  

Pregunta

Me gustaría crear un programa de dibujo multiplataforma.El único requisito para escribir mi aplicación es que tenga una precisión a nivel de píxeles sobre el lienzo.Por ejemplo, quiero escribir mi propio algoritmo de dibujo lineal en lugar de depender de otra persona.No quiero ningún tipo de suavizado (nuevamente, se requiere control del nivel de píxeles). Me gustaría que las interacciones de los usuarios en la pantalla fueran rápidas y receptivas (dependiendo de mi capacidad para escribir algoritmos rápidos).

Idealmente, me gustaría escribir esto en Python, o quizás en Java como segunda opción.La capacidad de hacer que la aplicación final sea multiplataforma fácilmente es imprescindible.Enviaré diferentes API en diferentes sistemas operativos si es necesario, siempre que pueda escribir una capa de abstracción alrededor de ellas.¿Algunas ideas?

apéndice:Necesito la habilidad de dibujar en la pantalla.Dibujando a un archivo que he descubierto.

¿Fue útil?

Solución

Esta semana preparé algunas diapositivas y código de demostración para hacer gráficos 2D usando OpenGL desde Python usando la biblioteca pyglet.Puedes ver mis cosas aquí: http://tartley.com/?p=378

Es muy rápido (relativamente hablando, para Python). He logrado mover alrededor de 1000 objetos posicionados y orientados de forma independiente por la pantalla, cada uno con aproximadamente 50 vértices.

Es muy portátil, todo el código que he escrito en este entorno funciona en Windows, Linux y Mac (e incluso en entornos oscuros como Pypy) sin que yo tenga que pensar en ello.

Actualizar: También hay un montón de publicaciones más nuevas sobre el mismo tema: http://tartley.com/?cat=27

Otros consejos

El cochinillo La biblioteca para Python podría satisfacer sus necesidades.Te permite utilizar OpenGL, una API de gráficos multiplataforma.Puede desactivar el suavizado y capturar regiones de la pantalla en un búfer o un archivo.Además, puedes utilizar sus sistemas de manejo de eventos, carga de recursos y manipulación de imágenes.Probablemente también puedas vincularlo a PIL (Biblioteca de imágenes de Python) y definitivamente a Cairo, una popular biblioteca de gráficos vectoriales multiplataforma.

Menciono Pyglet en lugar de PyOpenGL puro porque Pyglet maneja muchas cosas feas de OpenGL de forma transparente y sin esfuerzo de su parte.

Un amigo y yo estamos trabajando actualmente en un programa de dibujo usando Pyglet.Hay algunas peculiaridades: por ejemplo, OpenGL siempre tiene doble buffer en OS X, por lo que tenemos que dibujar todo dos veces, una para el fotograma actual y otra para el otro fotograma, ya que se invierten cada vez que se actualiza la pantalla.Puedes ver nuestro progreso actual. en este repositorio de subversión.(Splatterboard.py en el tronco es el archivo que querrás ejecutar). Si no sabes usar svn, estaré encantado de enviarte por correo electrónico un archivo .zip de la fuente más reciente.Siéntete libre de robar el código si lo investigas.

Si la opción de idioma está abierta, un archivo Flash creado con Haxe podría tener un lugar.Haxe es un lenguaje de programación dinámico y gratuito.Luego está el relacionado Neko, una máquina virtual (como Java, Ruby, Parrot...) para ejecutarse en Mac, Windows y Linux.Al ser en cierto modo una nueva forma mejorada de Flash, naturalmente puede dibujar cosas. http://haxe.org/

Canvas y QPainter de QT son muy buenos para este trabajo si desea utilizar C++.y es multiplataforma.

Hay un enlace de Python para QT pero nunca lo he usado.

En cuanto a Java, al usar SWT, la manipulación a nivel de píxeles de un lienzo es algo difícil y lenta, por lo que no lo recomendaría.Por otro lado, Swing's Canvas es bastante bueno y responsivo.Nunca he usado la opción AWT pero probablemente no quieras usar esa opción.

yo recomendaria wxPython

Es maravillosamente multiplataforma y puede obtener control por píxel y, si cambia de opinión, puede usarlo con bibliotecas como pyglet o agg.

Puede encontrar algunos ejemplos útiles de lo que está intentando hacer en la descarga de documentos y demostraciones.

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