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
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