Domanda

Mi piacerebbe creare un programma di disegno multipiattaforma.L'unico requisito per scrivere la mia app è che io abbia una precisione a livello di pixel sull'area di disegno.Ad esempio, voglio scrivere il mio algoritmo di disegno al tratto piuttosto che fare affidamento su qualcun altro.Non voglio alcuna forma di anti-aliasing (di nuovo, è richiesto il controllo del livello dei pixel). Vorrei che le interazioni degli utenti sullo schermo fossero rapide e reattive (in attesa della mia capacità di scrivere algoritmi veloci).

Idealmente, mi piacerebbe scriverlo in Python, o forse in Java come seconda scelta.La capacità di rendere facilmente multipiattaforma l'app finale è un must.Se necessario, mi sottoporrò a API diverse su sistemi operativi diversi purché sia ​​possibile scrivere un livello di astrazione attorno ad essi.Qualche idea?

aggiunta:Ho bisogno della capacità di disegnare sullo schermo.Disegnando un file che ho capito.

È stato utile?

Soluzione

Proprio questa settimana ho messo insieme alcune diapositive e codice demo per realizzare grafica 2D utilizzando OpenGL di Python utilizzando la libreria pyglet.Puoi vedere le mie cose qui: http://tartley.com/?p=378

È molto veloce (relativamente parlando, per Python): sono riuscito a ottenere circa 1.000 oggetti posizionati e orientati in modo indipendente che si muovono sullo schermo, ciascuno con circa 50 vertici.

È molto portabile, tutto il codice che ho scritto in questo ambiente funziona su Windows, Linux e Mac (e anche su ambienti oscuri come Pypy) senza che io debba mai pensarci.

Aggiornamento: Ci sono anche un sacco di post più recenti sullo stesso argomento: http://tartley.com/?cat=27

Altri suggerimenti

IL Maialino libreria per Python potrebbe soddisfare le tue esigenze.Ti consente di utilizzare OpenGL, un'API grafica multipiattaforma.È possibile disattivare l'antialiasing e acquisire aree dello schermo in un buffer o in un file.Inoltre, puoi utilizzare i suoi sistemi di gestione degli eventi, caricamento delle risorse e manipolazione delle immagini.Probabilmente puoi anche collegarlo a PIL (Python Image Library) e sicuramente Cairo, una popolare libreria di grafica vettoriale multipiattaforma.

Cito Pyglet invece del puro PyOpenGL perché Pyglet gestisce molte brutte cose OpenGL in modo trasparente senza alcuno sforzo da parte tua.

Un amico e io stiamo attualmente lavorando su un programma di disegno utilizzando Pyglet.Ci sono alcune stranezze: ad esempio, OpenGL ha sempre il doppio buffer su OS X, quindi dobbiamo disegnare tutto due volte, una volta per il frame corrente e un'altra per l'altro frame, poiché vengono invertiti ogni volta che il display si aggiorna.Puoi vedere i nostri progressi attuali in questo repository di sovversione.(Splatterboard.py nel trunk è il file che vorrai eseguire.) Se non sei disposto a utilizzare svn, sarei felice di inviarti tramite e-mail un file .zip dell'ultima fonte.Sentiti libero di rubare il codice se lo guardi.

Se la scelta della lingua è aperta, un file Flash creato con Haxe potrebbe avere un posto.Haxe è gratuito ed è un linguaggio di programmazione completo e dinamico.Poi c'è la relativa Neko, una macchina virtuale (come Java, Ruby, Parrot...) per girare su Mac, Windows e Linux.Essendo in qualche modo una nuova forma migliorata di Flash, naturalmente può disegnare cose. http://haxe.org/

Canvas e QPainter di QT sono ottimi per questo lavoro se desideri utilizzare C++.ed è multipiattaforma.

Esiste un collegamento Python per QT ma non l'ho mai usato.

Per quanto riguarda Java, utilizzando SWT, la manipolazione a livello di pixel di una tela è alquanto difficile e lenta, quindi non la consiglierei.D'altro canto il Canvas di Swing è piuttosto buono e reattivo.Non ho mai usato l'opzione AWT ma probabilmente non vorrai andarci.

io raccomanderei wxPython

È meravigliosamente multipiattaforma e puoi ottenere il controllo per pixel e se cambi idea puoi usarlo con librerie come pyglet o agg.

Puoi trovare alcuni esempi utili di ciò che stai cercando di fare nel download di documenti e demo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top