Как изменить размер изображения, нарисованного на панели в JavaSwing?

Я изучаю JavaSwing. Я хотел нарисовать изображение на кадре, но я хочу, чтобы нарисованное разрешение было 300*300. Вот мой код для рисования изображения на панели.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Picture 
{
    JFrame frame;
    public static void main(String[] args)
    {
        Picture poo = new Picture();
        poo.go();
    }
    private void go()
    {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);
        frame.getContentPane().add(new ImageOne());
    }
    class ImageOne extends JPanel
    {
        public void paintComponent(Graphics g)
        {
            Image img = new ImageIcon("image.jpg").getImage();
            g.drawImage(img, 2, 2, this);
        }
    }
}

Может кто-нибудь сказать мне, как это сделать? Я искал в сети, но я мог найти объяснения, связанные с BufferedImage, и я не знаю, как это использовать.
Заранее спасибо.

1 ответ

Решение

Я считаю, что вы ищете image.getScaledInstance (w, h, type). Это масштабирует изображение до заданной ширины (w) и высоты (h) до типа масштабирования. Тип масштабирования, который вы хотели бы использовать, - Image.SCALE_DEFAULT. Из-за того, как getScaledInstace работает, вы должны создать новый BufferedImage.

Таким образом, ваш код будет выглядеть примерно так

        BufferedImage img = null;
        try {
            img = ImageIO.read(new FileInputStream(new File("image.jpg")));
        } catch (Exception e) {}

        //Scale image to 300x300
        int width = 300;
        int height = 300;
        Image scaled = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);

        //Create new buffered image
        BufferedImage tempBuff = new BufferedImage(width, height, img.getType());

         // Create Graphics object
        Graphics2D tempGraph = tempBuff.createGraphics();
        // Draw the resizedImg from 0,0 with no ImageObserver then dispose
        tempGraph.drawImage(scaled,0,0,null);
        tempGraph.dispose();

        g.drawImage((Image)tempBuff, 2, 2, this);
Другие вопросы по тегам