0

谁能解释一下,我有 3 种方法可以创建 Image 对象,但只有最后一个对象(k)可以使用 getscalledinstance()成功缩放。

public class scalingTest extends JPanel {

    public static Image i;
    public static Image j;
    public static Image k;
    scalingTest() throws IOException
    {
        i = Toolkit.getDefaultToolkit().getImage("C:/Users/Prashant/Desktop/2.png");
        j = new ImageIcon("C:/Users/Prashant/Desktop/2.png").getImage();
        k = ImageIO.read(new File("C:/Users/Prashant/Desktop/2.png"));
    }
    public static void main(String s[]) throws IOException
    {
        JFrame jf = new JFrame("Scaling TEST");
        jf.add(new scalingTest());
        jf.setSize(500, 500);
        jf.setVisible(true);
    }
    @Override
    public void paintComponent(Graphics g)
    {
        g.drawImage(i.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 0, 0, this);
        g.drawImage(j.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 100, 100, this);
        g.drawImage(k.getScaledInstance(100, 100, Image.SCALE_DEFAULT), 200, 200, this);
    }
}
4

1 回答 1

0

阅读 Image.getScaledInstance 的 Javadoc:

返回一个新Image对象,它将在指定的默认情况下呈现width图像 heightImage即使原始源图像已经完全加载,新对象也可以异步加载。

确保在您尝试绘制时缩放的图像确实存在(如果您需要如何操作的建议,请查找“确保图像已完全加载”)。它与通过 ImageIO 获得的图像一起工作的原因是 ImageIO 为您提供了一个 BufferedImage,并且始终加载。

另请注意:为了简单地将图像绘制到图像大小以外的大小,您不需要创建缩放实例 - Graphics 具有动态绘制不同大小的图像的方法。根据用例,使用它可能会更好。

于 2012-07-25T16:34:11.193 回答