2011-03-25 166 views
0

我有这个功能用于旋转图像。尽管我失去了质量。任何可以改善它的变化?Java旋转图像丢失质量

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)上提供的图像之一。 – 2011-03-25 18:06:42

回答

1

AffineTransformOp.TYPE_NEAREST_NEIGHBOR总会让一切看起来像blergh。尝试使用AffineTransformOp.TYPE_BILINEARAffineTransformOp.TYPE_BICUBIC

+0

那么试过,图像完全失去颜色。 IT改变了一些奇怪的绿色和蓝色。 – 2011-03-25 18:29:31

+0

这听起来更像是图像或缓冲区颜色空间的问题,更不像转换问题。 – Bombe 2011-03-25 19:14:47

1

Try using bicubic or bilinear。链接显示了每个示例。

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

试过,图像完全失去颜色。 IT改变了一些奇怪的绿色和蓝色。 – 2011-03-25 18:33:04