2016-11-16 91 views
-1

我嘗試旋轉一個BufferedImage並且它可以工作,但是旋轉的圖像在一些邊上有一個黑色的邊框,我不知道爲什麼... 我也覺得它變得更小旋轉後。旋轉BufferedImage會給它一個黑色的邊框

import java.awt.image.BufferedImage; 
import java.awt.geom.AffineTransform; 
import java.awt.image.AffineTransformOp; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 


public class example { 

    static void main(String[] args) throws IOException { 

     BufferedImage imgResc = ImageIO.read(new File("landscape.jpg"));   

     AffineTransform tx = new AffineTransform(); 
     tx.rotate(Math.PI/2, imgResc.getWidth()/2, imgResc.getHeight()/2);//(radian,arbit_X,arbit_Y) 
     AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 
     BufferedImage rotatedImage = new BufferedImage(imgResc.getHeight(),imgResc.getWidth(),imgResc.getType()); 
     op.filter(imgResc, rotatedImage); 
     ImageIO.write(rotatedImage, "JPEG", new File("rotated_90_right.jpg")); 
    } 
} 

以上是用於旋轉圖像的代碼片段,就像我在網上發現的那樣。

幫助會很棒!

編輯:

這是應該的樣子,什麼旋轉後我得到: (1920×1200)

enter image description here

+0

您的寬度或高度是否可能是奇數?如果是這樣,你的分區將由兩個將引入舍入誤差,縮小圖像的像素。這是邊界的大小嗎? – Andrew

+0

我編輯了這個問題,並添加了最新的img結果。 – ViktorG

+0

它也不是旋轉在你發佈的內容... – Andrew

回答

1

如果通過PI/2,然後將新的圖像旋轉有寬度高度的源和高度寬度的源,所以:

BufferedImage rotatedImage = new BufferedImage(imgResc.getHeight(), 
               imgResc.getWidth(), 
               imgResc.getType()); 

會更好。

+0

這是很好的建議,但它並沒有回答所問的問題,因爲OP描述了四周的黑色邊框,並且圖像可能會縮小。 – ControlAltDel

+0

您是對的,謝謝。不過,黑色邊框的問題仍然存在。 – ViktorG