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