# Bild Größe ändern



## Guest (2. Jan 2008)

Hallo,

ich habe ein kleines Problem:

Ich habe ein BufferedImage-Objekt und möchte dieses vergrößern/verkleinern

habe nun schon gegoogelt und es dann versucht wie folgt umzusetzen:

erst Hoehe und Breite neu eingegeben (sind Instanzvariablen)

```
hoehe -=50;
breite -= 50;
```

dann mit dieser Methode versucht das ganze umzuwandeln

```
Image scale = image.getScaledInstance(breite, hoehe,Image.SCALE_SMOOTH);
```

da ich das image nicht zeichnen kann, sondern ein BufferedImage brauche, habe ich versucht, mein
image mit einem Typecast in ein BufferedImage umzuwandeln

```
image = (BufferedImage)scale;
```

das hat mit repaint(); dann aber nicht funktioniert

habe auch versucht ein neues BufferedImage zu erzeugen, mit der neuen hoehe und breite und wollte es dann irgendwie da rein zeichnen

```
BufferedImage img = new BufferedImage( breite, hoehe, BufferedImage.TYPE_INT_RGB );
img = (BufferedImage)scale;
```

aber irgendwie passiert gar nichts... 
Fehlermeldung ist immer, dass der Typecast nicht möglich ist, ich weiss aber nicht, wie ich das sonst hinkriegen soll - kann jemand helfen!?

Vielen Dank!


----------



## Guest (2. Jan 2008)

und btw., weiss jemand einen Algorithmus um die Sättigung eines Bildes zu ändern?

habe versucht, bei jedem Pixel min und max-Wert (also, r, g, b) zu finden, dann
s = 100*((max-min)/max)

und dann jeden pixel + s

funktioniert aber irgendwie nicht...
danke!


----------



## André Uhres (2. Jan 2008)

Anonymous hat gesagt.:
			
		

> ..Ich habe ein BufferedImage-Objekt und möchte dieses vergrößern/verkleinern..


"getScaledInstance" dürfen wir vergessen :wink: .  So müsste es klappen:

```
//create scaled BufferedImage:
        double scaleFactor = 0.8;
        int w = (int) (image.getWidth(null) * scaleFactor);
        int h = (int) (image.getHeight(null) * scaleFactor);
        BufferedImage scaledImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
//draw image on it:
        Graphics2D g2 = scaledImage.createGraphics();
        g2.drawImage(image, 0, 0, w, h, null);
```


----------



## Gast2 (2. Jan 2008)

http://www.java-forum.org/de/topic61532_icon-strecken-zerren.html


----------



## Gast2 (2. Jan 2008)

EDIT: doppelt post


----------



## Guest (3. Jan 2008)

Erstmal Danke für die Antworten, aber irgendwie klappt das bei mir nicht

Bis jetzt habe ich erreicht, dass ein neues Bild in der neuen Größe gezeichnet wird, leider ist es komplett schwarz! 
Was mache ich falsch?


```
public void groeßeaendern() {

	//image.getGraphics();	

	//	create scaled BufferedImage:
       double scaleFactor = 0.8;
       breite = (int) (image.getWidth() * scaleFactor);
       hoehe = (int) (image.getHeight() * scaleFactor);
       BufferedImage scaledImage = new BufferedImage(breite, hoehe, BufferedImage.TYPE_INT_RGB);
       
        //draw image on it:

//    habe auch hier schon versucht mit einer Schleife den einzelnen Pixelpunkten Farben zuzuweisen, hat auch nicht //geklappt

        Graphics2D g2 = scaledImage.createGraphics();
       // g2 = scaledImage.getGraphics();                      // oder das?
        image = scaledImage;
        
        g2.drawImage(image, 0, 0, breite, hoehe, null);
        
	repaint(); // wohl nicht mehr nötig
	}
```

meine paintMethode:


```
class MyPanel extends JPanel {
		public void paintComponent(Graphics g){
			g.drawImage(image, 0, 0, null);
		}
	}
```

meine Instanzvariable

```
private BufferedImage image;

	private int breite;
	private int hoehe;
// tut wohl nichts zur Sache, dennoch
```

kann jemand helfen?! Danke!


----------



## Gast2 (3. Jan 2008)

dein image muss vom typ Image sein nicht BufferedImage


----------



## Guest (3. Jan 2008)

sorry, das versteh ich jetzt nicht, meine Frage war zu Anfang doch, wie ich ein BufferedImage verändern kann!?

und wenn ich alles so mache, wie ihr es schreibt, und 
       "image = scaledImage;"
weglasse, dann tut sich gar nichts!

irgendwas versteh ich hier nicht!

sorry, bin anfänger!!


----------



## Guest (3. Jan 2008)

argh, jetzt habe ich es - ich musste meine eigene paint-methode ändern, dort stand nämlich nichts von hoehe und breite..

allerdings sieht das Bild verändert ehrlich gesagt ziemlich besch..eiden aus...


----------



## Gast2 (3. Jan 2008)

was ja wohl auch logisch ist, wenn du ein kleines bild groß machst werden die pixel errechnet... ein großes bild kleiner machen sieht nicht bescheiden aus...


----------



## André Uhres (3. Jan 2008)

Anonymous hat gesagt.:
			
		

> ..allerdings sieht das Bild verändert ehrlich gesagt ziemlich besch..eiden aus...


Man kann auch noch RenderingHints einsetzen. Hier ist ein interessanter Artikel darüber:
http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html


----------

