Java Tutorial/2D Graphics/AlphaComposite

Материал из Java эксперт
Перейти к: навигация, поиск

AlphaComposite.DST_IN

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeDSTIN extends JFrame {

 public AlphaCompositeDSTIN() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeDSTIN();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.DST_IN;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.DST_OUT

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeDSTOUT extends JFrame {

 public AlphaCompositeDSTOUT() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeDSTOUT();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.DST_OUT;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.DST_OVER

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeDSTOVER extends JFrame {

 public AlphaCompositeDSTOVER() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeDSTOVER();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.DST_OVER;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.SRC

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeSRC extends JFrame {

 public AlphaCompositeSRC() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeSRC();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.SRC;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.SRC_IN

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeSRCIN extends JFrame {

 public AlphaCompositeSRCIN() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeSRCIN();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.SRC_IN;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.SRC_OUT

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeSRCOUT extends JFrame {

 public AlphaCompositeSRCOUT() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeSRCOUT();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.SRC_OUT;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





AlphaComposite.SRC_OVER

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.ruponent; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class AlphaCompositeSRCOVER extends JFrame {

 public AlphaCompositeSRCOVER() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(500,500);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeSRCOVER();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.SRC_OVER;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





Alpha Composite with BufferedImage

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; public class AlphaCompositeCLEAR extends JFrame {

 public AlphaCompositeCLEAR() {
   getContentPane().add(new DrawingCanvas());
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(300,300);
   setVisible(true);
 }
 public static void main(String arg[]) {
   new AlphaCompositeCLEAR();
 }

} class DrawingCanvas extends JPanel{

 float alphaValue = 1.0f;
 int compositeRule = AlphaComposite.CLEAR;
 AlphaComposite ac;
 DrawingCanvas() {
   setSize(300, 300);
   setBackground(Color.white);
 }
 public void paint(Graphics g) {
   Graphics2D g2D = (Graphics2D) g;
   int w = getSize().width;
   int h = getSize().height;
   BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
   Graphics2D big = bi.createGraphics();
   ac = AlphaComposite.getInstance(compositeRule, alphaValue);
   big.setColor(Color.red);
   big.drawString("Destination", w / 4, h / 4);
   big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
   big.setColor(Color.blue);
   big.drawString("Source", 3 * w / 4, h / 4);
   big.setComposite(ac);
   big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
   g2D.drawImage(bi, null, 0, 0);
 }

}</source>





Composite Demo

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; public class MainClass extends JFrame {

 public static void main(String args[]) {
   MainClass app = new MainClass();
 }
 public MainClass() {
   super("Draw2D");
   add("Center", new MyCanvas());
   setSize(400, 400);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setVisible(true);
 }
 class MyCanvas extends Canvas {
   public void paint(Graphics graphics) {
     Graphics2D g = (Graphics2D) graphics;
     float alpha = 0.5f;
     AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
     g.setComposite(composite);
     Toolkit toolkit = Toolkit.getDefaultToolkit();
     Image image0 = toolkit.getImage("image0.gif");
     Image image1 = toolkit.getImage("image1.gif");
     g.drawImage(image0, 200, 100, this);
     g.drawImage(image1, 100, 150, this);
   }
 }

}</source>





Compositing is the combining of elements from separate sources into single images

   <source lang="java">

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 CompositingDST extends JPanel {

 public void paint(Graphics g) {
   Graphics2D g2d = (Graphics2D) g;
   AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.DST, 0.5f);
   BufferedImage buffImg = new BufferedImage(60, 60, BufferedImage.TYPE_INT_ARGB);
   Graphics2D gbi = buffImg.createGraphics();
   gbi.setPaint(Color.red);
   gbi.fillRect(0, 0, 40, 40);
   gbi.setComposite(ac);
   gbi.setPaint(Color.green);
   gbi.fillRect(5, 5, 40, 40);
   g2d.drawImage(buffImg, 20, 20, null);
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame("Composition");
   frame.add(new CompositingDST());
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(400, 120);
   frame.setVisible(true);
 }

}</source>





Composition technique in this animation.

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class ImageComposite extends JPanel implements ActionListener {

 Image a = new ImageIcon(this.getClass().getResource("a.png")).getImage();
 Image b = new ImageIcon(this.getClass().getResource("b.png")).getImage();
 Timer timer = new Timer(800, this);
 float alpha = 1f;
 public ImageComposite() {
   timer.start();
 }
 public void paint(Graphics g) {
   super.paint(g);
   Graphics2D g2d = (Graphics2D) g;
   BufferedImage buffImg = new BufferedImage(200, 100, BufferedImage.TYPE_INT_ARGB);
   Graphics2D gbi = buffImg.createGraphics();
   AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
   gbi.drawImage(a, 40, 30, null);
   gbi.setComposite(ac);
   gbi.drawImage(b, 0, 0, null);
   g2d.drawImage(buffImg, 20, 20, null);
 }
 public void actionPerformed(ActionEvent e) {
   alpha -= 0.1;
   if (alpha <= 0) {
     alpha = 0;
     timer.stop();
   }
   repaint();
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame();
   frame.add(new ImageComposite());
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(300, 210);
   frame.setVisible(true);
 }

}</source>





Draw ten rectangles with different levels of transparency

   <source lang="java">

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JPanel; public class TransparentRectangles extends JPanel {

 public void paint(Graphics g) {
   super.paint(g);
   Graphics2D g2d = (Graphics2D) g;
   for (int i = 1; i <= 10; i++) {
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, i * 0.1f));
     g2d.fillRect(50 * i, 20, 50, 50);
   }
 }
 public static void main(String[] args) {
   JFrame frame = new JFrame("Transparent Rectangles");
   frame.add(new TransparentRectangles());
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.setSize(600, 100);
   frame.setVisible(true);
 }

}</source>