2011-03-25 5 views
0

이미지를 회전시키는 데이 기능이 있습니다. 품질이 나 빠졌지 만 개선 할 수있는 변경 사항이 있습니까?자바 회전 이미지 품질 저하

public BufferedImage RotateImage(String imagePath,int degrees) throws IOException{ 
     File file = new File(imagePath); 
     Image image = ImageIO.read(file); 
     BufferedImage img=bufferImage(image, BufferedImage.TYPE_INT_RGB); 

     AffineTransform tx = new AffineTransform(); 
     double radians = (Math.PI/180) * degrees; 

     double width = img.getWidth()/2; 
     double height = img.getHeight()/2; 

     if(degrees != 180){ 
      tx.translate(height,width); 
      tx.rotate(radians); 
      tx.translate(-width,-height); 
     }else{      
     tx.rotate(radians,width, height); 
     } 

     AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); 
     img = op.filter(img, null); 
     return img; 
     } 
+0

[SSCCE] (http://pscode.org/sscce.html)를 게시 한 경우 ** 우리는 ** 다른 크기 조정 기술을 시도 할 수 있습니다. 이미지가 포함 된 SSCCE의 경우 코드에서 직접 생성하거나 네트워크에서 직접 이미지로 바로 링크합니다 (예 : 내 [미디어 페이지] (http://pscode.org/media/#image)에서 사용할 수있는 이미지 중 하나입니다. –

답변

1

AffineTransformOp.TYPE_NEAREST_NEIGHBOR은 항상 모든 것이 블러처럼 보일 것입니다. AffineTransformOp.TYPE_BILINEAR 또는 AffineTransformOp.TYPE_BICUBIC을 사용해보세요.

+0

글쎄, 이미지가 완전히 색을 잃어 버리려고했습니다. IT가 이상한 녹색 및 파랑 색으로 바뀝니다. –

+0

이미지 나 버퍼의 색상 공간에 문제가있는 것처럼 들리지만 변형 문제는 적습니다. – Bombe

1

Try using bicubic or bilinear. 링크는 각각의 예를 보여줍니다.

AffineTransformOp op = 
    new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 
+0

음, 이미지가 완전히 손상되었습니다. IT가 이상한 녹색 및 파랑 색으로 바뀝니다. –

2

AffineTransform의 필터링 매개 변수 중 몇 가지 다른 사람을 중요 사용해보십시오뿐만 아니라 그것의 경우 이미지가. 와서 인코딩에 따라 달라집니다 JPEG, lossless rotation isn't universally possible.