2016-04-04 17 views
1

私は、バッファされたImageを回転させ、getImage()メソッドを使用してバッファされたImage(回転イメージ)を返そうとしています。画像の回転は起こっていますが、保存中は画像を回転させることなくそのまま保存します。回転した画像を別の画像に保存するにはどうすればいいですか?

初期化:

private BufferedImage transparentImage; 

PaintComponent:

AffineTransform at = new AffineTransform(); 
at.rotate(Math.toRadians(RotationOfImage.value)); 
Graphics2D g2d = (Graphics2D) g; 

g2d.drawImage(transparentImage, at, null); 
repaint(); 

回転バッファリングされたイメージを返すメソッド。

public BufferedImage getImage(){ 
    return transparentImage; 
} 
+1

なぜあなたは 'paintComponent'でそれを回転させていますか?回転した画像をペイントする必要があります。コンポーネントの 'Graphics'コンテクストを回転させているので、あなたのやり方でイメージに影響を与えることはありません – MadProgrammer

答えて

2

基本的には、コンポーネントのGraphicsコンテキストを回転させると、元の画像には影響しません、それまでの画像を、ペイントしています。

代わりに、あなたは例えば、画像や絵画、それを回転しなければならない...

public BufferedImage rotateImage() { 
    double rads = Math.toRadians(RotationOfImage.value); 
    double sin = Math.abs(Math.sin(rads)); 
    double cos = Math.abs(Math.cos(rads)); 

    int w = transparentImage.getWidth(); 
    int h = transparentImage.getHeight(); 
    int newWidth = (int) Math.floor(w * cos + h * sin); 
    int newHeight = (int) Math.floor(h * cos + w * sin); 

    BufferedImage rotated = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g2d = rotated.createGraphics(); 
    AffineTransform at = new AffineTransform(); 
    at.translate((newWidth - w)/2, (newHeight - h)/2); 

    at.rotate(Math.toRadians(RotationOfImage.value), w/2, h/2); 
    g2d.setTransform(at); 
    g2d.drawImage(transparentImage, 0, 0, this); 
    g2d.setColor(Color.RED); 
    g2d.drawRect(0, 0, newWidth - 1, newHeight - 1); 
    g2d.dispose(); 
} 

次に、あなたが何かなどをやって、それを描くことができ...

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g.create(); 
    BufferedImage rotated = rotateImage(); 
    int x = (getWidth() - rotated.getWidth())/2; 
    int y = (getHeight() - rotated.getHeight())/2; 
    g2d.drawImage(rotated, x, y, this); 
    g2d.dispose(); 
} 

、あなたはこれを最適化することができるので、角度が変更されたときにのみ画像の回転バージョンを生成できますが、私はあなたに任せます。

ps-これはテストしていませんが、question

+0

*" ps-私はこれをテストしていません "* Pfft ..何度あなたはこれをしましたか?私はこのサイトで少なくとも** 3回以上(そして私の記憶は貧弱)見て回ることができると確信しています。 –

+0

@AndrewThompsonライブラリコードからアルゴリズムをコピーしたので、それは動作することを期待しています:P – MadProgrammer

+0

Meh .. BNI ... ;-) –