2014-03-24 100 views
2

我有代碼,創建一個圖像:(m_img是javafx.scene.image.Image給定一個javafx.scene.image.Image對象旋轉它,併產生一個旋轉javafx.scene.image.Image對象

Image m_img = new Image("file:" + p_Fil.getAbsoluteFile(),false); 

這是細,但它會忽略exif TAG_ORIENTATION,因此在縱向模式下拍攝的照片不會以正確的方式出現。

當我改變負載方法,我能夠讀取該標籤,並將結果保存到一個int(1-8)如下:

byte bb[] = FileUtilities.readFile(p_Fil); 
getOrientation(new ByteArrayInputStream(bb),p_Fil); 
m_img = new Image(new ByteArrayInputStream(bb)); 
if (m_orientation==1) return; //1 means no transformation required 

如果m_orientation是1,那麼它是正確的所以沒有需要採取進一步行動。

但現在我需要根據返回的數字以某種方式轉換圖像。 (旋轉或翻轉等)

我認爲javafx.scene.transform.Rotate類應該可以幫助我。 任何人都可以提供示例代碼給定一個圖像對象,你可以輸出另一個旋轉的圖像對象。

+0

晚兩年,但無論如何:'ImageView'提供了一個'setRotate'方法。這會有幫助嗎? –

回答

1

你將不得不依靠AWT此:

我推薦這個方法:

public BufferedImage getRotatedImage(BufferedImage bufferedImage, int angle) { 
    AffineTransform transform = new AffineTransform(); 
    transform.rotate(angle); 
    AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); 
    bufferedImage = op.filter(bufferedImage, null); 
    return bufferedImage; 
} 

然後:

BufferedImage buffImg= SwingFXUtils.fromFXImage(m_img, null); 
buffImg = getRotatedImage(buffImage, 90); //or other angle if needed be 
m_img = SwingFXUtils.toFXImage(buffImg, null);