Как изменить размер изображения, нарисованного на панели в 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);