⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clipimage.java

📁 初期JAVA学习非常有用的资料。帮助深入了解API。特别是Applet。
💻 JAVA
字号:
/* * @(#)ClipImage.java	1.2 98/07/09 * * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */import javax.swing.*;import java.awt.*;import java.awt.geom.*;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.event.WindowAdapter;import java.awt.image.BufferedImage;import java.net.URL;/** * Animated clipping of an image & shapes with alpha. */public class ClipImage extends JApplet implements Runnable {    private Image img;    private final double OINC[] = {5.0, 3.0};    private final double SINC[] = {5.0, 5.0};    private double x, y;    private double ix = OINC[0];    private double iy = OINC[1];    private double iw = SINC[0];    private double ih = SINC[1];    private double ew, eh;   // ellipse width & height    private GeneralPath p = new GeneralPath();    private AffineTransform at = new AffineTransform();    private BasicStroke bs = new BasicStroke(20.0f);    private Arc2D arc = new Arc2D.Float();    private Ellipse2D ellipse = new Ellipse2D.Float();    private RoundRectangle2D roundRect = new RoundRectangle2D.Float();    private Rectangle2D rect = new Rectangle2D.Float();    private Color redBlend = new Color(255, 0, 0, 120);    private Color greenBlend = new Color(0, 255, 0, 120);    private Thread thread;    private BufferedImage offImg;    private int w, h;    private boolean newBufferedImage;    public void init() {        setBackground(Color.white);        img = getImage(getURL("images/clouds.jpg"));        try {            MediaTracker tracker = new MediaTracker(this);            tracker.addImage(img, 0);            tracker.waitForID(0);        }        catch ( Exception e ) {}    }    public void drawDemo(Graphics2D g2) {        if ( newBufferedImage ) {            x = Math.random()*w;            y = Math.random()*h;            ew = (Math.random()*w)/2;            eh = (Math.random()*h)/2;        }        x += ix;        y += iy;        ew += iw;        eh += ih;        if ( ew > w/2 ) {            ew = w/2;            iw = Math.random() * -w/16 - 1;        }        if ( ew < w/8 ) {            ew = w/8;            iw = Math.random() * w/16 + 1;        }        if ( eh > h/2 ) {            eh = h/2;            ih = Math.random() * -h/16 - 1;        }        if ( eh < h/8 ) {            eh = h/8;            ih = Math.random() * h/16 + 1;        }        if ( (x+ew) > w ) {            x = (w - ew)-1;            ix = Math.random() * -w/32 - 1;        }        if ( x < 0 ) {            x = 2;            ix = Math.random() * w/32 + 1;        }        if ( (y+eh) > h ) {            y = (h - eh)-2;            iy = Math.random() * -h/32 - 1;        }        if ( y < 0 ) {            y = 2;            iy = Math.random() * h/32 + 1;        }        ellipse.setFrame(x, y, ew, eh);        g2.setClip(ellipse);        rect.setRect(x+5, y+5, ew-10, eh-10);        g2.clip(rect);        g2.drawImage(img, 0, 0, w, h, this);        p.reset();        p.moveTo(- w / 2.0f, - h / 8.0f);        p.lineTo(+ w / 2.0f, - h / 8.0f);        p.lineTo(- w / 4.0f, + h / 2.0f);        p.lineTo(+         0.0f, - h / 2.0f);        p.lineTo(+ w / 4.0f, + h / 2.0f);        p.closePath();        at.setToIdentity();        at.translate(w*.5f, h*.5f);        g2.transform(at);        g2.setStroke(bs);        g2.setPaint(redBlend);        g2.draw(p);        at.setToIdentity();        g2.setTransform(at);        g2.setPaint(greenBlend);        for ( int yy = 0; yy < h; yy += 50 ) {            for ( int xx = 0, i=0; xx < w; i++, xx += 50 ) {                switch ( i ) {                case 0 : arc.setArc(xx, yy, 25, 25, 45, 270, Arc2D.PIE);                    g2.fill(arc); break;                case 1 : ellipse.setFrame(xx, yy, 25, 25);                    g2.fill(ellipse); break;                case 2 : roundRect.setRoundRect(xx, yy, 25, 25, 4, 4);                    g2.fill(roundRect); break;                case 3 : rect.setRect(xx, yy, 25, 25);                    g2.fill(rect);                    i = -1;                }            }        }    }    public Graphics2D createDemoGraphics2D(Graphics g) {        Graphics2D g2 = null;        if ( offImg == null || offImg.getWidth() != w ||             offImg.getHeight() != h ) {            offImg = (BufferedImage) createImage(w, h);            newBufferedImage = true;        }        if ( offImg != null ) {            g2 = offImg.createGraphics();            g2.setBackground(getBackground());        }        // .. set attributes ..        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,                            RenderingHints.VALUE_ANTIALIAS_ON);        g2.setRenderingHint(RenderingHints.KEY_RENDERING,                            RenderingHints.VALUE_RENDER_QUALITY);        // .. clear canvas ..        g2.clearRect(0, 0, w, h);        return g2;    }    public void paint(Graphics g) {        w = getWidth();         h = getHeight();         if ( w <= 0 || h <= 0 )            return;        Graphics2D g2 = createDemoGraphics2D(g);        drawDemo(g2);        g2.dispose();        if ( offImg != null && isShowing() ) {            g.drawImage(offImg, 0, 0, this);        }        newBufferedImage = false;    }    public void start() {        thread = new Thread(this);        thread.start();    }    public synchronized void stop() {        thread = null;    }    public void run() {        Thread me = Thread.currentThread();        while ( thread == me && isShowing() ) {            Graphics g = getGraphics();            paint(g);            g.dispose();            thread.yield();        }        thread = null;    }    protected URL getURL(String filename) {        URL codeBase = this.getCodeBase();        URL url = null;        try {            url = new URL(codeBase, filename);        } catch (java.net.MalformedURLException e) {            System.out.println("Couldn't create image: "                             + "badly specified URL");            return null;        }        return url;    }    public static void main(String s[]) {        final ClipImage demo = new ClipImage();        WindowListener l = new WindowAdapter() {            public void windowClosing(WindowEvent e) {System.exit(0);}            public void windowDeiconified(WindowEvent e) { demo.start();}            public void windowIconified(WindowEvent e) { demo.stop();}        };        JFrame f = new JFrame("Java 2D Demo - ClipImage");        f.addWindowListener(l);        f.getContentPane().add("Center", demo);        f.setSize(new Dimension(400,300));        f.show();        demo.start();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -