API de desenho 2D rápida e com precisão de pixel para aplicativos gráficos?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu gostaria de criar um programa de desenho multiplataforma.O único requisito para escrever meu aplicativo é que eu tenha precisão no nível de pixel na tela.Por exemplo, quero escrever meu próprio algoritmo de desenho de linha em vez de depender de outra pessoa.Não quero nenhuma forma de anti-aliasing (novamente, é necessário controle de nível de pixel). Gostaria que as interações dos usuários na tela fossem rápidas e responsivas (dependendo da minha capacidade de escrever algoritmos rápidos).

Idealmente, eu gostaria de escrever isso em Python, ou talvez em Java como segunda opção.A capacidade de tornar facilmente o aplicativo final multiplataforma é essencial.Enviarei APIs diferentes em sistemas operacionais diferentes, se necessário, desde que eu possa escrever uma camada de abstração em torno delas.Alguma ideia?

termo aditivo:Eu preciso da habilidade de desenhar na tela.Desenhando para um arquivo que descobri.

Foi útil?

Solução

Esta semana, reuni alguns slides e código de demonstração para fazer gráficos 2D usando OpenGL de python usando a biblioteca pyglet.Você pode ver minhas coisas aqui: http://tartley.com/?p=378

É muito rápido (relativamente falando, para python). Consegui fazer com que cerca de 1.000 objetos posicionados e orientados de forma independente se movessem pela tela, cada um com cerca de 50 vértices.

É muito portátil, todo o código que escrevi neste ambiente funciona em Windows, Linux e Mac (e até mesmo em ambientes obscuros como Pypy) sem que eu tenha que pensar nisso.

Atualizar: Também há vários posts mais recentes sobre o mesmo assunto: http://tartley.com/?cat=27

Outras dicas

O Leitão biblioteca para Python pode atender às suas necessidades.Ele permite usar OpenGL, uma API gráfica multiplataforma.Você pode desativar o anti-aliasing e capturar regiões da tela em um buffer ou arquivo.Além disso, você pode usar seus sistemas de manipulação de eventos, carregamento de recursos e manipulação de imagens.Você provavelmente também pode vinculá-lo ao PIL (Python Image Library) e, definitivamente, ao Cairo, uma popular biblioteca de gráficos vetoriais multiplataforma.

Menciono o Pyglet em vez do PyOpenGL puro porque o Pyglet lida com muitas coisas feias do OpenGL de forma transparente, sem nenhum esforço de sua parte.

Atualmente, um amigo e eu estamos trabalhando em um programa de desenho usando Pyglet.Existem algumas peculiaridades - por exemplo, o OpenGL sempre tem buffer duplo no OS X, então temos que desenhar tudo duas vezes, uma para o quadro atual e novamente para o outro quadro, já que eles são invertidos sempre que a tela é atualizada.Você pode ver nosso progresso atual neste repositório subversion.(Splatterboard.py no trunk é o arquivo que você deseja executar.) Se você não estiver usando o svn, ficarei feliz em lhe enviar por e-mail um .zip da fonte mais recente.Sinta-se à vontade para roubar código se você investigar.

Se a opção de idioma estiver aberta, um arquivo Flash criado com Haxe pode ter um lugar.Haxe é gratuito e uma linguagem de programação dinâmica e completa.Depois há o relacionado Neko, uma máquina virtual (como Java, Ruby, Parrot...) para rodar em Mac, Windows e Linux.Sendo, de certa forma, uma nova forma aprimorada de Flash, naturalmente ele pode desenhar coisas. http://haxe.org/

O Canvas e o QPainter do QT são muito bons para esse trabalho se você quiser usar C++.e é multiplataforma.

Existe uma ligação python para QT, mas nunca a usei.

Quanto ao Java, usando SWT, a manipulação em nível de pixel de uma tela é um tanto difícil e lenta, então eu não a recomendaria.Por outro lado, o Canvas do Swing é muito bom e responsivo.Nunca usei a opção AWT, mas provavelmente você não quer ir para lá.

eu recomendaria wxPython

É lindamente multiplataforma e você pode obter controle por pixel e, se mudar de ideia, poderá usá-lo com bibliotecas como pyglet ou agg.

Você pode encontrar alguns exemplos úteis exatamente do que está tentando fazer no download de documentos e demonstrações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top