Image.getScaledInstance()

5 respostas
fabim

Oi pessoal…

tem uma hora aqui q preciso da uma redimensionada na imagem, ai to usando

minhaImagem.getScaledInstance(int novaLargura, int novaAltura, int algoritomoDeEscalonamento)

so tem um problema: essas novas dimensoes tem q ser INTEIRAS, e nao ta me atendendo, pq to precisando redimensionar algo do tipo 85%, 75%, 90%… e com inteiros eu so consigo 50%, 100%, 200%…

alguem tem um outro jeito de redimensionar imagem, q me permita obter essas reducoes mais precisas?

5 Respostas

ViniGodoy

Uma das formas é fazendo uma cópia redimensionada da imagem. Dê uma olhada nos artigos:

http://java.sun.com/products/java-media/2D/reference/faqs/index.html#Q_How_do_I_create_a_resized_copy

http://java.sun.com/developer/technicalArticles/Media/intimages

http://www.eclipse.org/articles/Article-Image-Viewer/Image_viewer.html#Transformation

E no livro:
http://fivedots.coe.psu.ac.th/~ad/jg/

fabim

afff…
esquece o q eu falei mano… mancada minha…

era so fazer getScaledInstance(imagem.getWidth - (image.getWidth / 10), imagem.getWidth - (image.getWidth / 10), algoritimo)

falha de matematica mesmo :oops:

ViniGodoy

Pois é, bem que eu tinha achado estranho! Já que você quer diminuir um décimo da imagem e ficar com os outros nove, não dá para fazer:

getScaledInstance(0.9 * image.getWidth(), 0.9 * imagem.getHeight(), algoritmo);

Talvez fique um pouco mais claro.

PS: O segundo parâmetro era width mesmo ou height, como eu coloquei?

fabim

ViniGodoy:
Pois é, bem que eu tinha achado estranho! Já que você quer diminuir um décimo da imagem e ficar com os outros nove, não dá para fazer:

getScaledInstance(0.9 * image.getWidth(), 0.9 * imagem.getHeight(), algoritmo);

Talvez fique um pouco mais claro.

PS: O segundo parâmetro era width mesmo ou height, como eu coloquei?

mas qdo eu multiplico int por float (0.9), vira int?
ou teria q fazer um castzinho (int) 0.9 * width?

bom, o problem ja ta resolvido, vlw ae a atencao cara :wink:

ViniGodoy

Ele vira float. Mas cuidado com seu cast. Você tem que deixar a segunda metade do código entre parênteses:
getScaledInstance((int)(0.9 * image.getWidth()), (int)(0.9 * imagem.getHeight()), algoritmo);

Se você esquecer, quem vai virar int antes da conta é o 0.9 e não o resultado da multiplicação… nesse caso, a figura não mudará de tamanho.

Criado 4 de janeiro de 2007
Ultima resposta 6 de jan. de 2007
Respostas 5
Participantes 2