2016-04-04 12 views
1

Bir tamponlu Image'u döndürmeye çalışıyorum ve Image arabelleğini (döndürülen görüntü) getImage() yöntemini kullanarak döndürmeye çalışıyorum. Görüntünün döndürülmesi gerçekleşiyor, ancak görüntü kaydedilirken görüntüyü döndürmeden resim gibi kaydediliyor.Döndürülmüş arabelleğe alınmış görüntü başka bir arabelleğe alınmış resimde nasıl kaydedilir?

başlatılması:

private BufferedImage transparentImage; 

PaintComponent:

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

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

döndürülür tamponlu Image dönmek için bir yöntem.

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

Neden "paintComponent" dosyasında döndürüyorsunuz? Döndürülmüş görüntüyü boyamalısınız. – MadProgrammer

cevap

2

Temel olarak, bileşenin Graphics bağlamını dönen ve orijinal görüntü üzerinde hiçbir etkisi olmayacaktır buna görüntüyü, boyuyorsun.

Bunun yerine, görüntüyü döndürme edilmeli ve Şimdi ...

Sonra
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(); 
} 

Eğer böyle bir şey yaptığını boyayabilseydin ... örneğin

@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(); 
} 

boyamaya, sen Bunu optimize edebilir, bu yüzden açı değiştiğinde görüntünün yalnızca döndürülmüş halini oluşturursunuz, ancak bunu size bırakacağım

ps- Bunu test etmedim, ancak bu question

+0

* "ps- bileşeninin" Grafikler "içeriğini döndürdüğünüz gibi, görüntü üzerinde herhangi bir etki yapmayacağınız gibi, bunu test etmedim. * Pfft .. kaç kez bunu yaptınmı? Eminim bu siteyi en az ** 3 kez hatırlıyorum (ve hafızam zayıf). –

+0

@AndrewThompson Algoritmayı kitaplık kodundan kopyaladığımdan, bir tanesi çalışmasını umuyor: P – MadProgrammer

+0

Meh .. BNI ... ;-) –