Estou trabalhando com imagens, e estou manipulando zoom nessas imagens, precisava gerar uma nova imagem mas somente com a área capturada pelo zoom, a medidas desse retângulo eu já tenho! Minha duvida seria como gerar somente uma determinada área da imagem??
Cheguei até o terceiro passo, mas agora não faço a mínima ideia de como gerar a nova imagem apartir do novo conjunto de pixels!!
Estou pesquisando desde ontem e não consigo achar uma solução!
Acho que mais fácil ainda é usar o método drawImage da classe Graphics.
Uma das suas assinaturas suporta as coordenadas da área de origem e as de destino. E a imagem é automaticamente redimensionada se o destino for maior ou menor que a origem.
Evita a manipulação direta de pixels, que é sempre mais arriscada. E também evita uma eventual calculeira.
ViniGodoy
Para usar o drawImage você faz:
publicBufferedImagegeraZoom(BufferedImageorigem,intx,inty,intw,inth,intzoomWidth,intzoomHeight){//Criamos uma nova BufferedImage para armazenar o zoomBufferedImagedestino=newBufferedImage(zoomWidth,zoomHeight,origem.getImageType());//Obtemos o seu graphics 2d, para poder edita-laGraphics2Dg2d=destino.createGraphics();//Desenhamos a área da imagem de origem no destinog2d.drawImage(origem,x,y,w,h,0,0,destino.getWidth(),destino.getHeight(),NULL);//Não precisamos de um imageobserver//Agora que o desenho está pronto, liberamos o g2dg2d.dispose();//Retornamos a imagem com o zoomreturndestino;}
ViniGodoy
Esse método ainda tem outra vantagem. Você pode escolher a qualidade da interpolação ao realizar o zoom.
O java suporta 3 tipos de interpolação: bilinear, bicubica ou "nearest neighbor’.
Para alterar a qualidade da interpolação, depois de criar o seu objeto graphics faça: