Bild neu skalieren - Bild in Bild speichern?

Stefan03

Mitglied
Hallo,

ich würde gerne ein Bild der Größe, z.B. 1842x834 auf 800x600 skalieren. Dazu soll aber das Seitenverhältnis beibehalten werden. Somit wird das neu skalierte Bild sicher nicht 800x600 haben. Dazu möchte ich das große Bild entsprechend skalieren und das neue Bild in die Mitte eines 800x600 großen Bild speichern.

Meine Frage: Wie funktioniert das? Den Skalierungsfaktor usw. und die Position zu berechnen, ist kein Problem ist. Das wird mit den Methoden getBreiteN() usw. erledigt.

Wenn dann z.B. 800x533 rauskommt, weiß ich nicht, wie das endgültige Bild dann 800x600 hat.

Anbei der Code

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ResizeImageExample {

private static BildRechnen b;
public static void main(String... args) throws IOException {
b = new BildRechnen();

File input = new File("E:\\Workspace\\Homepage_Bilder\\src\\Bildgroß.png");
BufferedImage image = ImageIO.read(input);


BufferedImage resized = resize(image, b.getHoeheN(), b.getBreiteN());
System.out.println("breite: " + b.getBreiteN());
File output = new File("E:\\Workspace\\Homepage_Bilder\\Bildklein.png");
ImageIO.write(resized, "png", output);

}

private static BufferedImage resize(BufferedImage img, int height, int width) {
//Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = resized.createGraphics();
Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
//Image tmp = new BufferedImage(800, 600, 2);
g2d.drawImage(tmp, b.getX(), b.getY(), null);
g2d.dispose();
return resized;
}

}
 
Java:
	private static BufferedImage resize(BufferedImage img, int height, int width) {
		// Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
		BufferedImage resized = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g2d = resized.createGraphics();
		Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
		// Image tmp = new BufferedImage(800, 600, 2);
		g2d.drawImage(tmp, (800 - width) / 2, (600 - height) / 2, width, height, null);
		g2d.dispose();
		return resized;
	}
 
Hi,

ich habe diese Zeile übernommen

g2d.drawImage(tmp, (800 - width) / 2, (600 - height) / 2, width, height, null);

doch leider ist das Bild immernoch 800x533 groß, selbst wenn ich bei den vorletzten Parametern 800x600 angebe.
 

Anhänge

  • Bild.png
    Bild.png
    3,2 KB · Aufrufe: 3
Wunderbar, dann wäre dieser Drops ja gelutscht. 🙂

/e (800 - width) / 2, (600 - height) / 2, width, height, zentriert das Bild mittig.
 

Zurück
Oben