View Javadoc

1   // Copyright 2003, FreeHEP
2   package org.freehep.graphicsio.test;
3   
4   import java.awt.BasicStroke;
5   import java.awt.Color;
6   import java.awt.Graphics;
7   import java.awt.Image;
8   import java.awt.MediaTracker;
9   import java.awt.Stroke;
10  import java.awt.image.BufferedImage;
11  
12  import org.freehep.graphics2d.VectorGraphics;
13  import org.freehep.util.images.ImageHandler;
14  
15  /**
16   * @author Mark Donszelmann
17   * @version $Id: TestTransparency.java 9972 2006-11-26 20:47:43Z duns $
18   */
19  public class TestTransparency extends TestingPanel {
20  
21      static Stroke stroke = new BasicStroke(5.f, BasicStroke.CAP_ROUND,
22              BasicStroke.JOIN_ROUND);
23  
24      private Image image;
25  
26      private Color bkg = Color.ORANGE;
27  
28      public TestTransparency(String[] args) throws Exception {
29          super(args);
30          setName("Transparency");
31  
32          MediaTracker t = new MediaTracker(this);
33          image = ImageHandler.getImage("images/transparent-image.gif",
34                  TestTransparency.class);
35          t.addImage(image, 0);
36          try {
37              t.waitForAll();
38          } catch (InterruptedException e) {
39              e.printStackTrace();
40          }
41      }
42  
43      public void paintComponent(Graphics g) {
44  
45          VectorGraphics vg = VectorGraphics.create(g);
46  
47          int numberOfImages = 16;
48          int dalpha = 255 / (numberOfImages - 1);
49          int imagesPerSide = (int) Math.sqrt(numberOfImages);
50          int x0 = 10;
51          int y0 = 10;
52          int width = getWidth();
53          int height = getHeight();
54          int dw = (width - 2 * x0) / imagesPerSide;
55          int dh = (height - 2 * y0) / imagesPerSide;
56          int x = x0;
57          int y = y0;
58  
59          vg.setBackground(bkg);
60          vg.clearRect(0, 0, width, height);
61  
62          BufferedImage[] bi = new BufferedImage[numberOfImages];
63          for (int n = 0; n < numberOfImages; n++) {
64              bi[n] = new BufferedImage(image.getWidth(this), image
65                      .getHeight(this), BufferedImage.TYPE_INT_ARGB);
66              bi[n].createGraphics().drawImage(image, 0, 0, this);
67              for (int j = 0; j < bi[n].getHeight(); j++) {
68                  for (int i = 0; i < bi[n].getWidth(); i++) {
69                      int data = bi[n].getRGB(i, j);
70                      if (((data >> 24) & 0xFF) == 0) {
71                          // mend transparent pixels
72                          data |= ((dalpha * n) << 24);
73                          data |= 0x00008080;
74                          bi[n].setRGB(i, j, data);
75                      }
76                  }
77              }
78          }
79  
80          int n = 0;
81          for (int i = 0; i < imagesPerSide; i++) {
82              for (int j = 0; j < imagesPerSide; j++) {
83                  vg.drawImage(bi[n], x, y, dw, dh, this);
84                  n++;
85                  x += dw;
86              }
87              x = x0;
88              y += dh;
89          }
90      }
91  
92      public static void main(String[] args) throws Exception {
93          new TestTransparency(args).runTest();
94      }
95  }