繁体   English   中英

缩放后的BufferedImage黑白

[英]BufferedImage black and white after scaling

缩放国家国旗的BufferdImages后,所有国旗中约有50%以黑白(不是灰度)显示,并且看起来确实有些奇怪,例如turky:

突厥的

这是一个黑白的例子 黑白

我在这里设置标志

protected void updateFlag(BufferedImage flag){
    int height = pnlFlag.getHeight();
    int width = (int)(1f * flag.getWidth() / flag.getHeight() * height);
    BufferedImage scaledFlag = new BufferedImage(width, height, flag.getType());

    Graphics2D g2d = scaledFlag.createGraphics();
    g2d.drawImage(flag, 0, 0, scaledFlag.getWidth(), scaledFlag.getHeight(), null);
    g2d.dispose();

    pnlFlag.flag = scaledFlag;
    pnlFlag.repaint();
}

还有我的JPanel

class FlagPanel extends JPanel{

    private BufferedImage flag;

    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        if(flag == null) return;

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

}

我很确定您不能只更改缓冲图像的高度和宽度,它会为您缩放。 尝试像此问题中那样使用getScaledInstance()。

下面的代码工作正常,但是您需要调用repaint方法,因为getScaledInstance方法会花费一些时间来生成缩放后的图像。

    public class Main extends JFrame {

    private ImageIcon ico;
    private boolean resize = true;
    private Image scale;

    public Main() {
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        ico = new ImageIcon("image.jpg");
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);

        Graphics2D gg = (Graphics2D) g;

        if (!resize) {
            g.drawImage(ico.getImage(), 0, 0, null);

        } else {
            if (scale == null) {
                scale = ico.getImage().getScaledInstance(ico.getIconWidth() / 2, ico.getIconHeight() / 2, Image.SCALE_SMOOTH);
            }

            g.drawImage(scale, 0, 0, null);

            // gg.scale(0.5, 0.5);
            // gg.drawImage(ico.getImage(), 0, 0, null);
        }

    }

    public static void main(String[] args) {
        Main m = new Main();
        m.setSize(600, 600);
        m.setVisible(true);

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM