我目前正在使用Swing在Java中设计Pac Man。我有使用以下语句在屏幕上绘制的PNG图像。

wall = new ImageIcon(GamePanel.class.getResource("wall.png")).getImage();
g2d.drawImage(wall, x, y, this);

我遇到的问题是,它似乎呈现了实际文件的非常低的色深再现。看起来它确实保留了透明度(灰色背景是Panel bg颜色),但是却失去了颜色深度。

实际的图像如下所示:运行时,其外观如下:

有没有人有办法解决吗?谢谢!

最佳答案

在第二张图片中似乎肯定有问题。在黑色的BG上看到它,看起来非常不同-没有“光晕”。

import java.awt.*;
import java.net.URL;
import javax.swing.*;

public class TestYellowDotImage {

    public static JLabel getColoredLabel(Icon icon, Color color) {
        JLabel label = new JLabel(icon);
        label.setBackground(color);
        label.setOpaque(true);

        return label;
    }

    public static void main(String[] args) throws Exception {
        URL url = new URL("http://i.stack.imgur.com/1EZVZ.png");
        final Icon icon = new ImageIcon(url);
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new GridLayout(0, 4));

                gui.add(new JLabel(icon));
                gui.add(getColoredLabel(icon, Color.BLACK));
                gui.add(getColoredLabel(icon, Color.WHITE));
                gui.add(getColoredLabel(icon, Color.RED));

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}

09-12 01:00