Question

Je voudrais créer un programme de dessin multi-plateforme. La seule exigence pour écrire mon application est que je dispose d'une précision au niveau des pixels sur la zone de dessin. Par exemple, je veux écrire mon propre algorithme de dessin au trait plutôt que de compter sur quelqu'un d'autre. Je ne souhaite aucune forme d'anti-crénelage (encore une fois, un contrôle du niveau des pixels est nécessaire.) J'aimerais que les interactions des utilisateurs à l'écran soient rapides et réactives (en attendant que je puisse écrire des algorithmes rapides.)

Idéalement, j'aimerais écrire ceci en Python, ou peut-être en Java comme second choix. La possibilité de créer facilement l’application finale multiplate-forme est indispensable. Je vais soumettre à différentes API sur différents OS si nécessaire, dans la mesure où je peux écrire une couche d'abstraction autour d'eux. Des idées?

addendum: j'ai besoin de la capacité de dessiner à l'écran . Dessiner dans un fichier que j'ai découvert.

Était-ce utile?

La solution

Je viens de préparer cette semaine des diapositives et du code de démonstration permettant de créer des graphiques en 2D à l'aide d'OpenGL à partir de python à l'aide de la bibliothèque pyglet. Vous pouvez consulter mes informations ici: http://tartley.com/?p=378

C’est très rapide (relativement parlant, pour python), j’ai réussi à faire bouger environ 1 000 objets indépendamment positionnés et orientés sur l’écran, chacun avec environ 50 sommets.

C’est très portable, tout le code que j’ai écrit dans cet environnement fonctionne sous Windows, ainsi que sous Linux et mac (et même dans des environnements obscurs comme Pypy) sans que je n’aie à y penser.

Mise à jour : il existe également de nombreux nouveaux articles sur le même sujet: http://tartley.com/?cat=27

Autres conseils

La bibliothèque Pyglet pour Python peut répondre à vos besoins. Il vous permet d'utiliser OpenGL, une API graphique multi-plateformes. Vous pouvez désactiver l'anti-aliasing et capturer des régions de l'écran dans une mémoire tampon ou un fichier. De plus, vous pouvez utiliser ses systèmes de gestion d'événements, de chargement de ressources et de manipulation d'images. Vous pouvez probablement aussi le lier à PIL (Python Image Library), et certainement à Cairo, une bibliothèque de graphiques vectoriels multi-plateformes très appréciée.

Je parle de Pyglet au lieu de PyOpenGL pur, parce que Pyglet gère beaucoup de choses OpenGL laides de manière transparente, sans effort de votre part.

Un ami et moi travaillons actuellement sur un programme de dessin utilisant Pyglet. Il y a quelques particularités - par exemple, OpenGL est toujours mis en tampon double sur OS X; nous devons donc tout dessiner deux fois, une fois pour l'image actuelle et l'autre pour l'image suivante, puisqu'elles sont retournées à chaque rafraîchissement de l'affichage. Vous pouvez consulter notre progression actuelle dans ce référentiel de sous-version . (Splatterboard.py dans trunk est le fichier que vous souhaitez exécuter.) Si vous n’êtes pas habitué à utiliser svn, je me ferai un plaisir de vous envoyer un fichier .zip de la dernière source. N'hésitez pas à voler du code si vous vous penchez dessus.

Si le choix de langue est ouvert, un fichier Flash créé avec Haxe peut avoir une place. Haxe est gratuit et constitue un langage de programmation complet et dynamique. Ensuite, il y a le Neko, une machine virtuelle (comme Java, Ruby's, Parrot ...) à exécuter sur Mac, Windows et Linux. D'une certaine manière, il s'agit d'une nouvelle forme améliorée de Flash qui peut naturellement attirer les utilisateurs. http://haxe.org/

Les QT Canvas et QPainter de QT sont très utiles pour ce travail si vous souhaitez utiliser le langage C ++. et c'est multiplateforme.

Il existe une liaison python pour QT mais je ne l'ai jamais utilisée.

Pour Java, l’utilisation de SWT, la manipulation au niveau des pixels d’une toile est quelque peu difficile et lente, je ne la recommanderais donc pas. De son côté, Swing's Canvas est plutôt bon et réactif. Je n'ai jamais utilisé l'option AWT mais vous ne voulez probablement pas y aller.

Je recommanderais wxPython

C’est une superbe plate-forme transversale, vous pouvez obtenir un contrôle par pixel et si vous changez d’idée à ce sujet, vous pourrez l’utiliser avec des bibliothèques telles que pyglet ou agg.

Vous pouvez trouver quelques exemples utiles concernant ce que vous essayez de faire dans le téléchargement de la documentation et des démos.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top