Java Graphics Composite несоответствия - PullRequest
0 голосов
/ 19 января 2019

Таким образом, я проходил учебники по 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");
    }
}

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

...