Несоответствия Java Graphics Composite

Итак, я просматривал учебные пособия по Java, однако при тестировании с классом AlphaComposite, как описано здесь: https://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html, когда я иду реализовывать их, разные атрибуты кажутся перепутанными. Например, AlphaComposite.Clear и AlphaComposite.SrcOut кажутся переключенными, а AlphaComposite.SrcIn удаляет неперекрывающиеся пиксели src, но не неперекрывающиеся целевые пиксели. Вот код, который я тестирую.

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TEST extends JFrame{
    public static int width = 1200;
    public static int height = 1200;

    public TEST(String title) {
        super(title);
        this.setContentPane(new Drawer());
        this.setSize(width,height);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    public class Drawer extends JPanel{
        BufferedImage image = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB);

        public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            Graphics2D graphics = image.createGraphics();

            graphics.setColor(Color.red);
            graphics.fillRect(0, 0, 100, 100);
            graphics.setColor(Color.gray);
            graphics.fillRect(100, 100, 100, 100);
            graphics.setComposite(AlphaComposite.SrcIn);

            graphics.setColor(Color.blue);
            graphics.fillRect(50, 50, 100, 100);


            graphics.dispose();
            g2.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
        }
    }
    public static void main(String[] args) {
        new TEST("HI");
    }
}

Итак, я неправильно реализую композит или здесь что-то еще не так?

graphics.setComposite(AlphaComposite.SrcIn); влияет только на то, что рисуется после его вызова.
c0der 19.01.2019 19:16

@c0der Но я думал, что точка, в которой вы устанавливаете композит, определяет, что является пунктом назначения, а что источником, причем пункт назначения — это то, что рисуется до его вызова, а источник — после. В противном случае, если вы установите композит в начале, как вы укажете, что есть что. Например, я уже говорил, что SrcIn не работает с моим кодом, как это сделать, чтобы была видна только перекрывающаяся область.

user9785654 19.01.2019 21:46

Добавьте иллюстрацию того, чего вы хотите достичь

c0der 20.01.2019 06:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
209
0

Другие вопросы по теме