Bildgröße ermitteln & setSize() übergeben

Stack

Mitglied
Hallo,

ist es möglich die Bildgröße zu ermitteln und diese Werte an die Methode
frame.setSize(600,700) zu übergeben so, dass das Fenster automatisch
in der Größe des BIldes erscheint. Sonst muss man das immer manuell machen.

Java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Bild extends JComponent {

    public void paint(Graphics g) {

        Image img = new ImageIcon("katze.jpg").getImage();
        BufferedImage bufferedImage = new BufferedImage(img.getWidth(null), img.getHeight(null),
        BufferedImage.TYPE_INT_RGB);
        bufferedImage.createGraphics();
        g.drawImage(img, 0, 0, null);
        g.dispose();
}

    public static void main(String[] argv) throws Exception {

          JFrame frame = new JFrame("Image...");
         frame.getContentPane().add(new Bild());
         frame.setSize(600,700);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
     }
}
 
Da du das Bild selbst zeichnest, kannst du nicht die Standard-Swing-Mechaniken verwenden. Allerdings ist deine Frage etwas, nunja, ich glaube du hast deinen eigenen Code nicht ganz gelesen.

Java:
13: BufferedImage bufferedImage = new BufferedImage(img.getWidth(null), img.getHeight(null),

24: frame.setSize(600,700);

Auf Zeile 13 erzeugst du ein neues BufferedImage in den selben Dimensionen wie dein Bild, indem du das Bild nach der Groesze fragst. In Zeile 24 setzt du die Groesze vom Frame. Also alles was du machen musst ist die beiden zu kombinieren. Am besten du setzt das Bild als Klassenvariable, so dass du immer darauf zugreifen kannst.

Auszerdem hast du noch ein paar andere Probleme in deinem Code:

Java:
    // Der Aufruf tut nichts wenn man das Ergebnis nicht irgendwo hinzuweist.
15: bufferedImage.createGraphics();
16: g.drawImage(img, 0, 0, null);
    // Du solltest das uebergebene Graphics-Objekt nicht zerstoeren, dafuer ist
    // Swing zustaendig. Es hier zu zerstoeren koennte zu Fehlern fuehren.
17: g.dispose();
 
@Stack :

Java:
import javax.swing.*;

public class Bild extends ImageIcon {
    public Bild(String filename) {
        super(filename);
    }

    @Override
    public int getIconWidth() {
        int w = super.getIconWidth();
        return Math.min(w, 1000);
    }

    @Override
    public int getIconHeight() {
        int h = super.getIconHeight();
        return Math.min(h, 1000);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Bild");
        frame.add(new JLabel(new Bild(" dein bild hier ")));
        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}
 

Zurück
Oben