Tenho uma BufferedImage de tamanho 1024x768, como posso reduzí-la a 100x100 no Java sendo que a BufferedImage não me permite o uso de resize, nem setSize nem quaisquer coisas desse tipo.
Obrigado.
BufferedImage - Redimensinonando?
13 Respostas
- Crie uma nova BufferedImage de 100x100.
- Depois copie a antiga na nova.
BufferedImage smaller = new BufferedImage(100, 100, bigger.getType());
Graphics2D g2d = smaller.createGraphics();
g2d.drawImage(bigger,
0, 0, bigger.getWidth(), bigger.getHeight(), //Coordenadas da imagem original
0, 0, 100, 100, //Coordenadas do destino
null) ; //Image observer.
g2d.dispose();
Note que com esse método, você também poderia copiar só um pedaço da imagem original, para só um pedaço do destino. Você também poderia fazer um flip (basta inverter o width e o x nas coordenadas da imagem original).
Há outra alternativa, se você quiser só redimensionar:
Image smaller = bigger.getScaledInstance(100, 100, Image.SCALE_SMOOTH);
Muito obrigado pela ajuda assim tão rápido.
Estou testando agora, qualquer coisa volto a postar.
Até logo e obrigado denovo. XD
Image smaller = bigger.getScaledInstance(100, 100, Image.SCALE_SMOOTH);
Eu usei esse método, mas depois de reduzí-la não consigo salvar ela, não da pra usar ImageIO.write(image,formato,arquivo) com uma forma Image pelo que parece e não consigo transportar Image para BufferedImage.
Ele diz que sun.awt.image.ToolkitImage cannot be cast to java.awt.image.BufferedImage.
Se alguém puder me dar uma ajuda com isso agora, agradeço, valeu.
E porque não usa o primeiro método, então? Dali já sai um BufferedImage!
Você pode transforma-lo numa função:
public BufferedImage scale(Image bigger, int newWidth, int newHeight) {
BufferedImage smaller = new BufferedImage(newWidth, newHeight, bigger.getType());
Graphics2D g2d = smaller.createGraphics();
g2d.drawImage(bigger,
0, 0, bigger.getWidth(), bigger.getHeight(), //Coordenadas da imagem original
0, 0, smaller.getWidth(), smaller.getHeight(), null) ; //Coordenadas do destino
g2d.dispose();
return smaller;
}
Daí é só chamar:
BufferedImage smaller = scale(bigger, 100, 100);
Estava vendo isso, é que parece que havia algum argumento a mais dentro da definição do g2d, não sei, vou tentar com o que você me passou agora.
Valeu mesmo pela ajuda cara.
É verdade. O último argumento é um ImageObserver. Esqueci dele, pode só colocar null.
OK, vou tentar isso obrigado.
Funcionou, mas a imagem ficou cortada, ele trouxe apenas um pedaço, acho que tem a ver com a posição x e y.
Tentei colocar a posição de acordo com o tamanho total da img, mas voltou tudo preto então voltei as posições pra 0, mas tá trazendo só um pedaço dela mesmo…
Estranho, sempre usei esse método e nunca tive problemas.
Não sei, eu tentei tirando a parte debaixo deixei apenas a primeira linha e ele voltou uma imagem totalmente preta, ja com o resto dos comandos ele retorna apenas parte da imagem, é muito estranho, ela parece estar ampliada também. Acho que ele cortou 100x100 a partir da posição 0,0… e parece que ela está sendo ampliada.
Será que não poderia ser a versão do Java ou talvez porque estou usando NetBeans?