簡體   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