Numa aplicação que estou desenvolvendo o Drag&Drop esta extremamente pesado. Gostaria de saber se é possivel diminuir a resolução do redesenho.
Basicamente quando se faz um Drag&Drop voce tem um grafico em movimento e o que eu queria saber se é possivel “diminuir os FPS (frames por segundo)” desse movimento para ter um ganho no desempenho
eu utilizo o anti aliasing, que tambem me faz perder em desempenho. existe algoritimos intermediarios de suavização de desenho que pese menos ou só tenho essa opção?
E
entanglement
Você pode pôr um timer no seu redesenho, de forma que você, em vez de ficar redesenhando a cada mudança de posição do mouse, só redesenhar depois de 0,5 segundo (por exemplo).
Você pode só redesenhar a ponta do mouse em vez de todas as linhas. Isso é como quando você arrasta uma janela e em vez de mostrar a janela inteira à medida que você a arrasta, só mostra o contorno.
tabocu
Isso me parece interessante, pelo que devo procurar?
Ou vc tem algum link/exemplo que eu possa olhar?
Marky.Vasconcelos
Voce pode guardar esse grafico em uma BufferedImage já desenhando com a otimização, e desenhar apenas esse BufferedImage no Graphics2D.
tabocu
Marky, desculpe minha falta de conhecimento mas como seria fazer isto?
Sabe de algum exemplo ou sobre o que devo ler?
ViniGodoy
Para seguir a dica do Mark:
Crie uma BufferedImage do tamanho do seu gráfico. Por exemplo, digamos que seja 50x50:
Agora, ao invés de redesenhar o gráfico o tempo todo, simplesmente desenhe a imagem já pronta:
public void paintComponent(Graphics g) {
g.drawImage(imagem, x, y, null);
}
Desenhar BufferedImages na tela é um processo acelerado por hardware, milhares de vezes mais rápido do que desenhar usando o Graphics2D diretamente. Além disso, você não precisará recalcular boa parte do anti-aliasing, pois isso já estará armazenado na imagem.
Marky.Vasconcelos
tabocu:
Marky, desculpe minha falta de conhecimento mas como seria fazer isto?
Sabe de algum exemplo ou sobre o que devo ler?
Exatamente o que o ViniGodoy postou.
tabocu
Nossa, muito bom!
Por exemplo, se eu desenhar uma linha, a parte que nao foi desenhada fica como transparencia?
ViniGodoy
Sim, é para isso que serve aquele último parâmetro.
Usar essa técnica é o que deixou o Particles tão veloz.
tabocu
Nossa viny, muito obrigado pela sua ajuda. Alias eu achei muito legal o Particles.
O codigo fonte dele é fechado?
ViniGodoy
Por hora é sim. Vou publicar uma série de artigos sobre ele no Ponto V! e então disponibilizar o código pra quem quiser ler.
É que sem um pouco de texto fica um pouquinho complicado entender pq fiz ali as coisas do jeito que fiz.