Java Поворот изображения Потерянное качество - PullRequest
0 голосов
/ 25 марта 2011

У меня есть эта функция для вращения изображений. Хотя я теряю качество. Есть ли какие-либо изменения, которые могут улучшить его?

 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;
         }

Ответы [ 4 ]

2 голосов
/ 25 марта 2011

Параметр фильтрации AffineTransform, о котором упоминалось несколько других, важен, но он также зависит от кодировки ваших изображений. Если это JPEG, вращение без потерь не всегда возможно .

1 голос
/ 25 марта 2011

Попробуйте использовать бикубическую или билинейную .Ссылка показывает пример каждого.

AffineTransformOp op = 
    new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
1 голос
/ 25 марта 2011

Попробуйте использовать либо TYPE_BICUBIC

или

TYPE_BILINEAR

1 голос
/ 25 марта 2011

AffineTransformOp.TYPE_NEAREST_NEIGHBOR всегда заставит все выглядеть как blergh.Попробуйте использовать AffineTransformOp.TYPE_BILINEAR или AffineTransformOp.TYPE_BICUBIC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...