Изменение цвета RGB, в том числе альфа, при рисовании на Buffered Image - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь написать буферизованное изображение и прочитать его цвета обратно. Хотя альфа остается неизменной, цвета RGB, похоже, меняются. Я не могу понять причину этого. Любая помощь по исправлению этого приветствуется. Мне нужно, чтобы изображение вернуло тот же цвет, что и я.

    try {
        BufferedImage img=new BufferedImage(256, 256,
                BufferedImage.TYPE_INT_ARGB);

        Graphics graphics =
                img.createGraphics();
        int r=45;int g=45; int b=100; int a=50;
        System.out.println("Red  "+r+"   Green "+g+"    Blue "+b+"   alpha "+a);

        graphics.setColor(new Color(r,g,b,a));
        graphics.fillRect(10,10, 40, 40);

        Integer i=img.getRGB(23,23);
        Color c=new Color(i,true);

        System.out.println("Going to read color back");
        System.out.println("Red  "+c.getRed()+"   Green "+c.getGreen()+"    Blue "+c.getBlue()+"   alpha "+c.getAlpha());

    } catch (Exception e) {
        e.printStackTrace();
    }

Вывод программы: Красный 45 Зеленый 45 Синий 100 альфа 50

Собираюсь прочитать цвет назад

Красный 46 Зеленый 46 Синий 102 альфа 50

1 Ответ

1 голос
/ 30 октября 2019

Код ниже должен быть добавлен перед рисованием чего-либо на изображении с альфа-каналом, если вы хотите сохранить исходный цвет. Это решило мою проблему.

graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));

Альфа Композитный Документ Альфа Композитный учебник

...