olá, estou com um pequeno problema no meu programa, estou desenvolvendo um aplicativo para processamento de imagens, e ao abrir uma imagens, desenvolvi um codigo para redimensionar a mesma caso a imagem seja maior q a tela do programa, mas após isso meu programa esta ficando com um leve delay, eu imagino q seja pelo if e whiles que o codigo possui, segue abaixo o codigo, se alguem souber alguma outra força de redimensionar a imagem proporiconalmente ou otimizar esse meu codigo eu agradeço.
public void paintComponent(Graphics g) {
super.paintComponent(g);
desenha(g);
}
[code]private void desenha(Graphics g){
/* Função tá muito lenta!!*/
int imgLargura = jPanel1.getWidth();
int imgAltura = jPanel1.getHeight();
if(imagem!=null){
Double novaImgLargura = (double) imagem.getWidth(); //imagem é a imagem aberta pelo programa
Double novaImgAltura = (double) imagem.getHeight();
Double imgProporcao = null;
if (novaImgLargura >= imgLargura) {
imgProporcao = (novaImgAltura / novaImgLargura);
novaImgLargura = (double) imgLargura;
novaImgAltura = (novaImgLargura * imgProporcao);
while (novaImgAltura > imgAltura) {
novaImgLargura = (double) (--imgLargura);
novaImgAltura = (novaImgLargura * imgProporcao);
}
} else if (novaImgAltura >= imgAltura) {
imgProporcao = (novaImgLargura / novaImgAltura);
novaImgAltura = (double) imgAltura;
while (novaImgLargura > imgLargura) {
novaImgAltura = (double) (--imgAltura);
novaImgLargura = (novaImgAltura * imgProporcao);
}
}
int x = (jPanel1.getWidth() - imagem.getWidth()) / 2;
int y = (jPanel1.getHeight() - imagem.getHeight()) / 2;
if(imagem.getWidth() <= jPanel1.getWidth() || imagem.getHeight() <= jPanel1.getHeight() ){
g.drawImage(imagem.getScaledInstance(novaImgLargura.intValue(), novaImgAltura.intValue(), 100), x, y, imagem.getWidth(), imagem.getHeight(), null);
}
else {
g.drawImage(imagem.getScaledInstance(novaImgLargura.intValue(), novaImgAltura.intValue(), 100), 0, 0, jPanel1.getWidth(), jPanel1.getHeight(), null);
}
g.dispose();
jPanel1.repaint();
}
}[/code]