如何调整Java Swing 中绘制在面板上的图像的大小?
How to resize the image drawn on the Panel in 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 相关的解释,但我不知道如何使用它。
提前致谢。
我相信您正在寻找 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);
我正在学习 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 相关的解释,但我不知道如何使用它。
提前致谢。
我相信您正在寻找 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);