# Bilder skalieren



## jorgeHX (17. März 2005)

Hallo zusammen,

ich habe ein Problem mit meinem Bildeditor. Man soll verschiedene Bilder in den Editor laden können und auf diesen rumzeichnen können.

Das Laden, Malen und Speichern klappt einwandfrei, allerdings sollen Bilder immer in einem Fenster von 750*500 angezeigt werden. 

Dies bedeutet, dass man größere Bilder entsprechend proportonial verkleinert? Leider weiß ich nicht wie das richtig geht? Kann mir da jemand weiterhelfen?

Das Bild soll dann auf schwarzem Hintergrund zentriert auf einer Fläche von 750*500 angezeigt werden.

Danke,
Jorge


----------



## macfreakz (18. März 2005)

schon mal mit AfflineTransform probiert? 

Die Verkleinerung erfolgt faktorweise. 

Beispiel:


```
AfflineTransform transform = AfflineTransform.getScaleInstance(0.8, 0.8); 
g.setAfflineTransform(transform);
g.drawImage(...);
```

Wie das Bild auf gewünschte Grösse verkleinert werden kann, 
muss man den Verkleinerungsfaktor ausrechnen. 


```
Bildgrösse = 1.0
750px = ?
...
```


----------



## jorgeHX (18. März 2005)

Moin,
ich habe es skalliert...

Allerdings wird jetzt das Image immer links oben in meinem 750*550 großen JLabel angezeigt. Besteht irgendwie die Möglichkeit, dass man das Image zentriert darstellt?

Tausend Dank


----------



## macfreakz (18. März 2005)

```
deinJLabel.setVerticalAlignment(SwingConstants.CENTER) 
deinJLabel.setHorizontalAlignment(SwingConstants.CENTER)
```

API genauer gucken ...


----------



## JoFl (18. März 2005)

```
// Grafikname
String grafikName = p_grafikName;

// Grafik laden
File inputFile = new File(grafikName);
try
{
	// gespeichert wird
	File outputFile	= new File(thumbName);

	// lese Bild ein und skaliere
	BufferedImage img = ImageIO.read(inputFile);
	Image scaledImage = img.getScaledInstance(scaleWidthPic(Integer.parseInt(p_maxHoehe), img.getHeight(), img.getWidth()), Integer.parseInt(p_maxHoehe), Image.SCALE_SMOOTH);
	// Datei speichern
	ImageIO.write(convertRendered2Image(scaledImage), "jpg", outputFile);
}
catch (IOException e)
{
	e.printStackTrace();
}
```

Ich hoffe, dass du mit diesem Codeschnipsel etwas anfangen kannst.
Übergeben werden hier Werte wie p_maxBreite, o_maxHoehe und grafikName.
Die beiden Breitenangaben sind die anzuwendenden Größenangaben. grafikName ist ein String, in dem der Grafkname gespeichert ist.
convertRendered2Image ist eine andere Funktion (die ich hier nicht mitgepostet habe). Diese Funktion macht aber nix anderes als das Bild vom Typ RenderedImage in Image zu konvertieren.


----------

