# bild verkleinern



## moechelly (29. Jul 2007)

hallo,

ich habe einen ImageIcon, weches ich in einem JTable anzeigen lassen möchte, das probleme ist, dass das bild sehe groß ist.
Wie kann ich dies verkleinern befor ich es anzeige?

Gruß
Moe


----------



## moormaster (29. Jul 2007)

Mal ein ganz schnell zusammengefuschtes Beispiel:


```
import java.io.*;

import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;

import javax.imageio.*;
import javax.swing.*;

public class ImageTest extends JFrame
{
	public ImageTest() throws IOException
	{
		super("ImageTest");
		initComponents();
	}

	public void initComponents() throws IOException
	{
		setLayout(new FlowLayout());

		// Bild einlesen
		// test.gif hat eine Originalgröße von 128x128
		BufferedImage imgIn = ImageIO.read(new File("test.gif"));
		// um 50% verkleinern
		AffineTransformOp atop = new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), AffineTransformOp.TYPE_BICUBIC);
		// Ausgabe-Image vorbereiten
		BufferedImage imgOut = atop.createCompatibleDestImage(imgIn, ColorModel.getRGBdefault());

		// AffineTransform durchführen
		atop.filter(imgIn, imgOut);

		// Vergleich zwischen verkleinertem JLabel und verkleinertem Bild

		// nur JLabel verkleinert
		JLabel jl_1 = new JLabel(new ImageIcon(imgIn));
		jl_1.setPreferredSize(new Dimension(64, 64));

		// JLabel mit verkleinertem Bild
		JLabel jl_2 = new JLabel(new ImageIcon(imgOut));

		add(jl_1);
		add(jl_2);

		validate();

		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setVisible(true);
		setSize(new Dimension(320, 240));
	}

	public static void main(String[] args)
	{
		try
		{
			ImageTest test = new ImageTest();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}
```


----------



## Guest (29. Jul 2007)

hi,

das ist zwar gut, aber es funktioniert so wie ich es sehe nur für .gif bilder.
geht es auch für .jpg?

ich danke dir sehr für die Hilfe

Gruß
Moe


----------



## moormaster (29. Jul 2007)

Wo steht, dass es nur für gif-Bilder funktioniert? AffineTransformation kannst du auf allen BufferedImage-Objekten anwenden.


----------



## Guest (29. Jul 2007)

Aus dem Grund, dass wenn ich einen jpg bild auslesen möchte bekomme ich eine Exception, dass das bild nicht gelesen werden konnte.

ich weiß aber nicht weswegen.


----------



## Guest (29. Jul 2007)

javax.imageio.IIOException: Can't read input file!
	at javax.imageio.ImageIO.read(ImageIO.java:1275)


----------



## moormaster (29. Jul 2007)

Also ich hab mein test.gif einfach in jpg umgewandelt und das ging ohne Probleme.
Liegt die jpg auch im gleichen Verzeichnis, von wo aus das Programm ausgeführt wird? Tippfehler im Dateinamen? Vielleicht sogar ungültige jpg Datei?


----------



## Guest (29. Jul 2007)

Ich danke dir viel mal für die Hilfe, aber es liegt an irgendwas bei mir.

da der Fehler beim auslesen der jpg stattfindet, habe ich dein code einbisschen  geändert, dann hat es funktioniert.
also statt das bild zu lesen, habe ich folgendes gemacht.


```
BufferedImage buffer = new BufferedImage(100,80,BufferedImage.TYPE_INT_ARGB);
Graphics2D graph = buffer.createGraphics();
ImageIcon imgIn = new ImageIcon(imgPath);
graph.drawImage(imgIn.getImage(), 0, 0, buffer.getWidth(), buffer.getHeight(),null);
return buffer;
```
[/code]


----------



## dhachim (30. Jul 2007)

Hi Moe, 

kannst nicht aufhören zu arbeiten ? Mach mal Urlaub 

Grüßle 
Daniel Hachim


----------



## Gaston (31. Jul 2007)

Hi Daniel,

ich kann mir nicht vorstellen, dass der Moe Urlaub macht.

Gruß

Gaston


----------

