透明背景上的setColor没有显示正确的颜色

时间:2018-07-04 12:29:13

标签: java bufferedimage graphics2d

我有一个透明的png图像。我正在尝试在透明区域上的图像上创建一个填充的多边形。我正在设置颜色,但是最终图像中的实际颜色与预期的不同。这是我的代码:

        Graphics2D g = wifiImage.createGraphics();
        int [] x = {0, 200, 0};
        int [] y = {0, 0, 200};
        g.setColor(new Color(255, 0, 0)); //Red color
        g.drawPolygon(x, y, 3);
        g.fillPolygon(x, y, 3);
        g.dispose();
        ImageIO.write(wifiImage, "png", new File("./output/finalImage.png"));

在最后的图像中,我期望红色三角形。但是它是一些褐色。

作为一种解决方法,我在origImage中用白色替换了透明度。在这种情况下,它可以工作。

有人能告诉我如何在png的透明区域设置正确的颜色吗?

1 个答案:

答案 0 :(得分:0)

PNG图像可能是调色板图像,其中“褐色”是最接近(255,0,0)的调色板颜色。

尝试一下:

    BufferedImage copy = new BufferedImage(wifiImage.getWidth(), wifiImage.getHeight(), BufferedImage.TYPE_INT_ARGB); 
    g = copy.createGraphics();
    copy.drawImage(wifiImage, 0, 0, null);
    int [] x = {0, 200, 0};
    int [] y = {0, 0, 200};
    g.setColor(new Color(255, 0, 0)); //Red color
    g.drawPolygon(x, y, 3);
    g.fillPolygon(x, y, 3);
    g.dispose();
    ImageIO.write(copy, "png", new File("./output/finalImage.png"));