Processamento Lento do Programa

0 respostas
K

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);
            }
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();
        }
            
    }
Criado 24 de junho de 2013
Respostas 0
Participantes 1