# Image drehen



## Drake (27. Jun 2007)

Hallo

ich komme hier heute morgen leider nicht weiter.

Habe ein BufferedImage aus dessen Pixel ich einen Winkel ermittel um das ich das Image zur weiteren Arbeit damit gerne drehen würde. Habe auch schon hier gesucht, doch bezog sich alles was ich fand nur auf den Zweck des Zeichnens. 
Vielleicht liegts auch am Stauder Konsum von gestern Abend oder am noch nicht ausreichenden Kaffee Konsum heute Morgen, aber ich krieg die Verknüpfung dessen heute einfach nicht hin, ich will das Image nicht zeichnen, nur drehen um dann damit weiter zu arbeiten.

mfg
Drake


----------



## Quaxli (27. Jun 2007)

Ich bin mir nicht ganz sicher, aber ohne die Zeichenfunktion wirst Du nicht auskommen, denke ich.
Erstell doch einfach über den entsprechenden Konstruktor eine "leeres" BufferedImage, holde Dir von dem das Graphics-Object und zeichne das alte Image hinein, nachdem Du es rotiert hast.


----------



## Drake (27. Jun 2007)

Klingt gut, mein Problem war das ich es zwar mit Graphics rotieren könnte, nur fehlte mir die Verknüpfung wie es dann wieder als Image vorliegen hab.
Eigentlich fehlt sie mir noch immer, aber jetzt weiss ich wie ich weiter vorgehen könnte.


----------



## Drake (27. Jun 2007)

Gut, mit


```
Graphics2D g2 = (Graphics2D) this.imgBlubb.getGraphics();
g2.rotate(winkelRad);
```

krieg ich es gedreht, wenn ich es zeichnen lasse, habe ich auch das richtige Ergebniss.
Doch wie erzeuge daraus wieder ein Image mit dem ich weiter arbeiten kann, hab da irgendwie eine Logiklücke;

[edit]
instinktiv antworten geklickt, edit hätte es auch getan
[/edit]


----------



## Quaxli (27. Jun 2007)

Mal auf die Schnelle rudimentär hingeworfen etwa so:


```
BufferedImage neu = new BufferedImage(imgBlubb.getWidht(),....);
Graphics gneu = neu.getGraphics();
AffineTransform at = new AffineTransform();

at.rotate(Math.toRadians(angle), x , y );
gneu.setTransform(at);
gneu.drawImage(imgBlubb,0,0,null);
```

So, in etwa. Schau Dir mal die einzelnen Mehtoden an, dann kriegst Du das hin.


----------



## Quaxli (27. Jun 2007)

Nochmal als gescheites Beispiel:


```
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;


public class Test extends JFrame{

	private static final long	serialVersionUID	= 1L;
	
	BufferedImage source;
	BufferedImage target;
	
	public static void main(String[] args) {
    new Test();
	}

	public Test(){
		setSize(400,400);
		setLocation(100,100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		getImages();
		
		setVisible(true);
	}

	public void paint(Graphics g) {
		super.paint(g);
		g.drawImage(source, 20, 20, this);
		g.drawImage(target,100,100,this);
	}
	
	private void getImages(){
		
		URL pic_url = this.getClass().getClassLoader().getResource("tex.jpg");

		try {
			source = ImageIO.read(pic_url);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		target = new BufferedImage(source.getWidth(),source.getHeight(),source.getType());
		Graphics2D g2 = (Graphics2D) target.getGraphics();
		AffineTransform at = new AffineTransform();
		
		at.rotate(Math.toRadians(90),target.getWidth()/2,target.getHeight()/2);
		g2.setTransform(at);
		g2.drawImage(source, 0, 0, this);
		
	}
}
```


----------



## Drake (27. Jun 2007)

Danke 

Habe deinen ersten Post leider erst später wirklich verstanden und war schon auf einem ähnlichen Trichter, habe die AffineTransform nur auf die Graphichs vom Ursprungsbild angewendet.

mfg
Drake

[edit]
Danke für die Mühe mit dem zweiten Beispiel, wäre nicht mehr nötig gewesen, dein erstes hat mit den letzten Denkanstoß gegeben der gefehlt hat
[/edit]


----------

