3

BMP で JPanel を埋めるにはどうすればよいですか?

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class BMPPanel extends JPanel {


    String sciezka;
    Image image;
    int skala;
    int rozdzielczosc;
    Dimension d;
    public static int NORMALNA = 0, MALA = 1;

    public BMPPanel(String sciezka, int skala, int rozdzielczosc) {
        this.sciezka = sciezka;
        this.skala = skala;
        this.rozdzielczosc  = rozdzielczosc;
        super.setMaximumSize(d);
        this.d = new Dimension(400,400);
        this.go();
    }
    public BMPPanel(String sciezka, int skala) {
        this(sciezka,skala,200);
    }


    public void go() {
        try {
            File input = new File(sciezka);
            image = ImageIO.read(input);
        } catch (IOException e) {
            e.printStackTrace();
        }



        setPreferredSize(new Dimension(image.getWidth(null),
                image.getHeight(null)));
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(image, 0, 0, this);
    }

    @Override 
    public void setMaximumSize(Dimension d){

    }



}
4

1 に答える 1

2

あなたが答える必要がある最初の質問は、BMPのアスペクト比を維持したいですか?

そうでなければ、それは同じくらい簡単です

Image scaled = image.getScaledInstance(getWidth() - 1, getHeight() - 1, Image.SCALE_SMOOTH);

そうでない場合は、自分自身に尋ねる必要があります。画像を「塗りつぶす」か「合わせる」か。塗りつぶしを使用すると、画像がパネルからオーバーフローしますが、完全に塗りつぶされます。フィットすると、画像全体がパネルに収まりますが、ギャップが残る場合があります。

同様の質問への回答であるこの回答を読んでください

于 2012-08-17T15:35:32.103 に答える