2014-01-27 175 views
-2

您能評論這段代碼嗎?我理解一些部分,但不是全部。Java圖像旋轉

該代碼是一種圖像90度逆時針旋轉:

public static void rotate(String originalImage, String convertedImage) throws Exception { 
    BufferedImage bufferImg = ImageIO.read(new File(originalImage)); 
    BufferedImage bufferImgOut = new BufferedImage(bufferImg.getWidth(),bufferImg.getHeight(), bufferImg.getType()); 
    for(int x = 0; x < bufferImg.getWidth(); x++) { 
     for(int y = 0; y < bufferImg.getHeight(); y++) { 
      int px = bufferImg.getRGB(x, y); 
      int destY = bufferImg.getWidth() - x - 1; //what does this line do? 
      bufferImgOut.setRGB(y,destY, px); 
     } 
    } 
    File outputfile = new File(convertedImage); 
    ImageIO.write(bufferImgOut, "png", outputfile); 
} 
+0

基本上,因爲搖擺座標系'開始出現Y = 0'在頂部,你必須翻轉x座標旋轉。 – Radiodef

回答

1

給出下面的軸

 y 
     | o 
-x ------- x 
     | 
    -y 

旋轉需要選自Y改變軸到X和從X的圖像到-Y

 y 
     | 
-x ------- x 
     | o 
    -y 

代碼bufferImgOut.setRGB(y,destY, px);每點(x,y)的分配給(Y,-x),那麼第代碼int destY = bufferImg.getWidth() - x - 1代表-x,但圖像不支持負軸,然後再次在正軸上平移。 -1只是由於java索引(從0到寬度)。

換句話說:

y   x   x 
| o  | o   | o 
---- x  ---- -y  ---- y 
original (y, - x) (y, Width() - x - 1) 

我希望它能幫助

+0

非常感謝你!我現在明白了! – MaryAD