setColor на прозрачном фоне не показывает правильный цвет - PullRequest
0 голосов
/ 04 июля 2018

У меня есть изображение в формате 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"));

На последнем изображении я ожидаю красный цветовой треугольник. Но вместо этого это какой-то коричневатый цвет.

В качестве обходного пути в моем исходном изображении я заменил прозрачность белым цветом. В этом случае это работает.

Кто-нибудь может сказать, как установить правильный цвет в прозрачной области PNG?

1 Ответ

0 голосов
/ 04 июля 2018

Изображение 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...