# Image mit Graphics2D zeichnen



## Colt45 (19. Dez 2010)

Mahlzeit!
Ich steh vor einem kleinen, wahrscheinlich sehr trivialen Problem:
Ich will (vorerst) mal ein Image in ein JFrame zeichnen und das dann mittels MouseWheel skalieren.
Das klappt auch mit Graphics ganz gut:

```
public class scalePicture extends JFrame
{
	private Image map;
	
	public scalePicture()
	{
		init();
		map = Toolkit.getDefaultToolkit().getImage("C:\\...\\karte.jpg");
	}
	public void init()
	{
		this.setSize(800,600);
	}
	public void paint(Graphics g)
	{
		g.drawImage(map, 0, 0, this);
		this.repaint();
	}
	
	
	public static void main(String[] args)
	{
		scalePicture sp = new scalePicture();
		sp.setVisible(true);
		sp.validate();
	}
}
```
Allerdings bietet Graphics keine Methode zum Skalieren.
Wenn ich mir nun die API anschaue, sieht die MEthode drawImage folgendermaßen aus:

drawImage(BufferedImage img, BufferedImageOp op, int x, int y)
          Renders a BufferedImage that is filtered with a BufferedImageOp.

bzw.

drawImage(Image img, AffineTransform xform, ImageObserver obs)
          Renders an image, applying a transform from image space into user space before drawing.

Leider kenn ich mich weder mit dem Interface BufferedImageOp noch mit AffineTransformation noch mit ImageObserver aus und bin ziemlich überfordert, was das ganze betrifft. Bin auch ziemlich raus was programmieren betrifft, weil ich 9 monate nichts mehr gemacht habe in der hinsicht.
Wenn mir jemand ein paar tipps oder hinweise geben könnte, wie das ganze funktioniert, wäre ich sehr dankbar.


----------



## eRaaaa (19. Dez 2010)

Gibt doch noch weitere drawImage Methoden?
Z.B. drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) 
Damit ließe sich dein Vorhaben doch umsetzen?!


----------



## Colt45 (19. Dez 2010)

aber nicht bei Graphics2D...
oder täusche ich mich?


----------



## eRaaaa (19. Dez 2010)

Du täuschst dich


----------



## Colt45 (19. Dez 2010)

Graphics2D
dann sag mir bitte wo...


----------



## eRaaaa (19. Dez 2010)

Methods inherited from class java.awt.Graphics

--> drawImage --> Graphics (Java 2 Platform SE 5.0)


----------



## Colt45 (19. Dez 2010)

aber wieso wird mir das image jetzt nichtmehr gezeichnet?

```
public class scalePicture extends JFrame implements ImageObserver
{
	private Image map;
	private Graphics2D g;
	
	public scalePicture()
	{
		init();
		map = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Jonas\\Desktop\\ROCS\\karte.jpg");
	}
	public void init()
	{
		this.setSize(800,600);
	}
	public void paint(Graphics2D g)
	{
		this.g = g;
		g.drawImage(map,0,0,300,300,this);		
		this.repaint();
	}
	
	
	public static void main(String[] args)
	{
		scalePicture sp = new scalePicture();
		sp.setVisible(true);
		sp.validate();
	}
}
```


----------



## eRaaaa (19. Dez 2010)

also das repaint in dem paint hat eig. nichts zu sauchen.
Ich würde an deiner Stelle auch ein JPanel dem JFrame hinzufügen und dort zeichnen ! 

Lösche mal die Zeilen 15-20 und füge stattdessen z.B. in deiner init-Methode so etwas wie

```
JPanel panel = new JPanel() {
			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.drawImage(map, 0, 0, 300, 300, this);
			}
		};
		getContentPane().add(panel);
```
hinzu !


----------



## Colt45 (19. Dez 2010)

ich probiers morgen mal aus, bin ziemlich erledigt heute
aber danke schonmal...


----------



## tagedieb (20. Dez 2010)

Der Parameter fuer die paint Methode ist _Graphics _und nicht _Graphics2D_..., deshalb wird dein Image nicht mehr gezeichnet.
Das Graphics Objekt kann man aber in ein Graphics2 Objekt casten.


```
public void paint(Graphics g) {
  Graphics2D g2 = (Graphics2D)g;
  // do something with g2 object
}
```

Fuer Swing Componenten sollte anstatt der 'paint' die Methode 'paintComponent' ueberschrieben werden:


```
protected void paintComponent(Graphics g) {
  Graphics2D g2 = (Graphics2D)g;
  // do something with g2 object
}
```


----------

