java - java中图像的平滑缩放

标签 java swing

我创建了一个扩展 Jbutton 的按钮,我添加到按钮图像中,但这不会使图像呈现平滑。 我尝试 getScaledInstance 但它不起作用

这是原始图像:

This is the origianl image

这就是它真正呈现的图片:

enter image description here

public class Button extends JButton {
private Image image;


public Button(Image image) {
    this.image = image;
}

public Image getImage() {
    return image;
}

public void setImage(Image image) {
    this.image = image;
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}

编辑:

我明白为什么它不能使图像变得平滑。 我必须将 drawImage 更改为 g.drawImage(image, 0, 0, null);

我运行代码,有时它会向我显示图片,有时会向我显示空方 block ,这会在控制台中向我显示错误。

只有我用鼠标移动它们,图片才会出现

enter image description here

最佳答案

尝试以下操作。这是非常不言自明的。

public class CircleDisplay extends JPanel {

    final static int height = 500;
    final static int width = 500;
    Image img = null;
    JFrame frame = new JFrame();

    public static void main(String[] args) {
        new CircleDisplay();
    }

    public CircleDisplay() {
        Image img = null;
        try {
            img = ImageIO
                    .read(new File("f:yellowCircle.png"));
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        frame.setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        img = 
                img.getScaledInstance(50, 50,
                        Image.SCALE_SMOOTH);
        Button b = new Button(img);
        b.setPreferredSize(new Dimension(50,50));

        add(b);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

class Button extends JButton {
    Image img;
    public Button(Image img) {
        this.img = img;
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(img,0,0,null);
    }
}



关于java - java中图像的平滑缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935952/

相关文章:

Java Swing ImageIcon 数组 setIcon 仅显示最后一个图像

java - Java 程序的 AS400 签核

java - 当泛型不是协变时,为什么可以显式转换泛型类型数组?

java - log4j,在使用时清除日志(不仅仅是在启动时)

Java MVC 多个 JFrame

java - 更新 JComboBox

java - 重新加载由 getResourceAsStream 加载的资源

java - 如何在 jersey web 服务中从 android 读取多部分实体

java - 更改在 JTextArea 中键入的文本的字体

java - 将应用程序链接到 Swing GUI 的最佳方式是什么?