Bilder verkleinern

Serethos

Erfahrenes Mitglied
Mein Problem besteht darin ich möchte gern eine Preview Programmieren.

Hab mir dafür ein Fenster gebastelt in dem Fenster existiert ein JPanel darin liegt ein JLabel dieses JLabel soll nun ein Bild(jpg) anzeigen. Ich möchte aber nicht das Bild in oginal Größe sehen sondern das bild soll verkleinert werden das ich es vollständig in einer größe von 60 * 40 sehe oder sowas.

Muss nicht unbedingt JLabel seien kann auch JPanel sein oder euch fällt ein anderer Kontener ein

MFG

Danke schon mal
 
Hallo,

Du könntest zum Beispiel die paint() Methode von dem JLabel überschreiben und dort die Größe des Images manipulieren.

Ich habe heir ein kleines Beispiel, das das demonstrieren soll:
Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ScaledImageTest extends JFrame {
    private BufferedImage image;
    private int scale = 100;
    
    public ScaledImageTest() {
        super("ScaledImageTest");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        try {
            URL url = new URL("http://java.sun.com/products/java-media/3D/collateral/class_notes/images/Gears.jpg");
            image = ImageIO.read(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        final JLabel label = new JLabel() {
            public final void paint(Graphics g) {
                final Rectangle bounds = getBounds();
                int width = image.getWidth() * scale / 100;
                int height = image.getHeight() * scale / 100;
                int x = (bounds.width - width) / 2;
                int y = (bounds.height - height) / 2;
                g.drawImage(image, x, y, width, height, this);
            }
        };
        
        final JSlider slider = new JSlider(JSlider.VERTICAL, 0, 100, 100);
        slider.setMajorTickSpacing(10);
        slider.setMinorTickSpacing(1);
        slider.setPaintTicks(true);
        slider.addChangeListener(new ChangeListener(){
            public final void stateChanged(ChangeEvent e) {
                scale = slider.getValue();
                label.repaint();
            }
        });
        
        final Container c = getContentPane();
        c.setLayout(new BorderLayout());
        c.add(label, BorderLayout.CENTER);
        c.add(slider, BorderLayout.EAST);
        
        setSize(700, 530);
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new ScaledImageTest();
    }

}
Gruß
Vincent
 
Hallo!

Ich glaube:
Code:
package de.tutorials;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Test37 {

	public static void main(String[] args) {
		try {
			BufferedImage img = ImageIO.read(new File("c:/test.jpg"));
			Image smallImg = img.getScaledInstance(160,120,Image.SCALE_FAST);
			//...
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

ist das was du suchst...

Gruß Tom
 
danke für die antworten hab auch ne lösung gefunden und zwar die von Thomas Darimont geht sehr gut mit
getScaledInstance(160,120,Image.SCALE_FAST);


danke nochmals für die antworten
 
Hi,
ich suche auch nach einer Lösung zum Bilder verkleinern.
Allerdings will ich das JPEG Bild laden, verkleinern und anschließen wieder das verkleinerte Bild speichern.
Weiss jemand wie ich ein java.awt.Image wieder gespeichert bekomme?

Gruß,
Scope5
 
Zurück