Redimensionar imagem (RESOLVIDO)

Galera, estou precisando redimensionar um imagem, mas apenas para manipulação e visualização, só que não queria grava-la em disco.
Em pesquisas encontrei o trecho de código

private void redimensionaImg() throws IOException {
        //BufferedImage imagem = ImageIO.read(RedimensionarImagem.class.getResourceAsStream("background.jpg"));
        BufferedImage imagem = null;
        try {
            imagem = ImageIO.read(new File(m_ImageFile));
        } catch (IOException ex) {
            Logger.getLogger(ImagePanel2.class.getName()).log(Level.SEVERE, null, ex);
        }
        int new_w = 200, new_h = 200;
        BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = new_img.createGraphics();

        g.drawImage(imagem, 0, 0, new_w, new_h, null);
        ImageIO.write(new_img, "JPG", new File("c:/nweImg.jpg"));
    }

Ele funciona muito bem, só que grava em disco, e não encontro algo referente a como redimensionar imagens sem precisar salvar em disco novamente, quero ler uma imagem do disco, apenas uma unica vez e depois redimensiona-la, alguém saberia me ajudar?

acho que isso te ajuda kra:

ImageIcon img = new ImageIcon (Form.class.getClassLoader().getResource("Imagens/botões/controle/btoExcluir.png")); img.setImage(img.getImage().getScaledInstance(50, 50, 100));

getScaledInstance(largura, altura, não lembro, mas deixa o numero 100 que funciona ))

hheheheheh

espero ter ajudado!

1 curtida

Ok, obrigado, deu certo.

Agradeço também,

Agradeço³

Srs.

Estive com o mesmo problema que nosso amigo Tomassoni, e a solução que encontrei foi a indicada pelo Sarkozy.
Porém, com esta solução dele dava um erro de “nullPointerException”.

Fiz esta alteração e funcionou perfeitamente:

ImageIcon icon = new ImageIcon("Imagens/botões/controle/btoExcluir.png"); //Somente esta linha foi alterada
icon.setImage(icon.getImage().getScaledInstance(50, 50, 100));

Espero ter ajudado.

1 curtida

Valew CorreiaM, também havia encontrado o erro, agora funcionou legal.

É antigo, mas já que foi ressuscitado…

A forma postada pelo autor do tópico é recomendada. É bem melhor que a do ImageIcon.getScaledInstance(). Para não salvar a imagem, basta remover a última linha (onde ele faz um ImageIO.write) e retornar um ImageIcon no lugar:

private ImageIcon redimensionaImg(File image, int new_w, int new_h) throws IOException {
    try {
        BufferedImage imagem = ImageIO.read(image);
        BufferedImage new_img = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);

        Graphics2D g = new_img.createGraphics();
        g.drawImage(imagem, 0, 0, new_w, new_h, null);
        g.dispose();

        return new ImageIcon(new_img);
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    }
}

Em resumo, só salvava em disco porque o autor mandava salvar. =P

Caso queiram trocar o File por um getClass().getResource() basta trocar o parâmetro File image para URL image. Outra possibilidade é trocar esse parâmetro para um BufferedImage e deixar o ImageIO.read fora do método (é a forma que prefiro).

1 curtida