Eu estou com uma dúvida, tem como eu dar um repaint(); só em uma área específica?
Por exemplo, eu tenho uma tela pintado com o fundo preto. E no meio eu tenho uma outra imagem qualque que eu vou precisar ficar dando repaint nela (em um intervalo de segundos). Eu não queria dar repaint na tela inteira porque o processamento da máquina sobe muito, tem como eu dar repaint só na imagem do meio sem dar repaint no fundo tb?
Estou tentando ver a função clip, mas não sei se tem alguma coisa haver.
Além disso, se é você que está desenhando o componente no paintComponent, então você também pode otimizar ainda mais o desenho para obedecer esse comando de repaint. Nesse caso, use o getClipRect() do Graphics para obter exatamente qual é a área de pintura.
Se você não utilizar, o java irá ignorar o que for pintado fora do ClipRect, o que já garante um bom aumento de performance.
Outro detalhe. Usar BufferedImages em java é extremamente rápido. Porém, para obter a máxima performance, você deve usar corretamente. Dê uma lida nesse artigo para mais informações: http://www.jhlabs.com/ip/managed_images.html
ViniGodoy
PS: Repintar uma imagem, nem que ela ocupe a tela inteira, num intervalo de segundo nem sequer faz cócegas na maioria dos processadores.
Se o intervalor for o de milisegundos, aí sim, comece a se preocupar.
Leco2
putz ViniGodoy muito obrigado por esclarecer, não testei ainda mas tenho certeza que já vai me ajudar bastante!
As vezes a gente fica tão bitolado com um problema que nem percebe essas coisas, já tinha lido o Javadoc e nem reparei nesse outro repaint
Grato!
Leco2
haha na verdade é em milisegundos, tenho q atualizar em tempo real na verdade!
ViniGodoy
Ainda assim, é bem tranquilo colocar na tela uma imagem a 30 fps (taxa da maioria das câmeras).
Só veja esse artigo que coloquei no final, e use um bom algorítmo de controle do seu loop.
Que tipo de aplicação você está fazendo? Um player de vídeo ou um jogo?
Leco2
putz cara na verdade eu estou desenhando batimentos cardíacos (ECG) na tela, eu recebo os dados e vou desenhando.
ViniGodoy
Saquei, e qual é a taxa de atualização do hardware?
Leco2
então a taxa com que os dados chegam pra mim é de 240Hz por segundo
ViniGodoy
Caraca… 240Hz é realmente uma taxa animal.
Leia o artigo do JHLabs que postei ali, vai ser muito importante para você. É importante também dar uma lida nesse tutorial aqui do Ponto V:
E, a menos que vc esteja falando de uma aceleração, todo hert já é por segundo. xD
Abraços,
Vinícius
Leco2
hahah vlw cara pelas dicas!! Vou fazer bom uso delas.
Eu já tinha conseguido fazer essa aplicação, mas antes eu recebia dados de um aparelho só. Agora a exigência mudou e eu tenho que processar e plotar na tela os dados de 4 e se possível 8 aparelhos. Agora imagina ter q tratar todos esses dados chegando na porta serial e ainda por cima ter que pintar. O processamento da minha máquina sobre pra 100%. Tudo bem que essa máquina aqui não é lah grande coisa!