<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FClip</id>
		<title>Java Tutorial/2D Graphics/Clip - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FClip"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Clip&amp;action=history"/>
		<updated>2026-04-07T15:08:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Clip&amp;diff=3484&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Clip&amp;diff=3484&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Clip&amp;diff=3485&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Clip&amp;diff=3485&amp;oldid=prev"/>
				<updated>2010-05-31T15:25:04Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  A clipping area can also be created from a text string. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * @(#)ClipImage.java 1.2 98/07/09&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Sun grants you (&amp;quot;Licensee&amp;quot;) a non-exclusive, royalty free, license to use,&lt;br /&gt;
 * modify and redistribute this software in source and binary code form,&lt;br /&gt;
 * provided that i) this copyright notice and license appear on all copies of&lt;br /&gt;
 * the software; and ii) Licensee does not utilize the software in a manner&lt;br /&gt;
 * which is disparaging to Sun.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY&lt;br /&gt;
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR&lt;br /&gt;
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE&lt;br /&gt;
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING&lt;br /&gt;
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS&lt;br /&gt;
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,&lt;br /&gt;
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER&lt;br /&gt;
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF&lt;br /&gt;
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is not designed or intended for use in on-line control of&lt;br /&gt;
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in&lt;br /&gt;
 * the design, construction, operation or maintenance of any nuclear&lt;br /&gt;
 * facility. Licensee represents and warrants that it will not use or&lt;br /&gt;
 * redistribute the Software for such purposes.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.TextLayout;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Starry extends JApplet {&lt;br /&gt;
  public void init() {&lt;br /&gt;
    Image starry = new ImageIcon(&amp;quot;yourFile.gif&amp;quot;).getImage();&lt;br /&gt;
    StarPanel starPanel = new StarPanel(starry);&lt;br /&gt;
    getContentPane().add(starPanel, BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  protected URL getURL(String filename) {&lt;br /&gt;
    URL codeBase = this.getCodeBase();&lt;br /&gt;
    URL url = null;&lt;br /&gt;
    try {&lt;br /&gt;
      url = new URL(codeBase, filename);&lt;br /&gt;
    } catch (java.net.MalformedURLException e) {&lt;br /&gt;
      System.out.println(&amp;quot;Couldn&amp;quot;t create image: &amp;quot; + &amp;quot;badly specified URL&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Image starry = new ImageIcon(&amp;quot;yourFile.gif&amp;quot;).getImage();&lt;br /&gt;
    StarPanel starPanel = new StarPanel(starry);&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;Starry&amp;quot;);&lt;br /&gt;
    f.addWindowListener(new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    f.getContentPane().add(starPanel, BorderLayout.CENTER);&lt;br /&gt;
    f.setSize(new Dimension(550, 200));&lt;br /&gt;
    f.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class StarPanel extends JPanel {&lt;br /&gt;
  Image img;&lt;br /&gt;
  int w, h;&lt;br /&gt;
  public StarPanel(Image img) {&lt;br /&gt;
    this.img = img;&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    setBackground(Color.white);&lt;br /&gt;
    w = getSize().width;&lt;br /&gt;
    h = getSize().height;&lt;br /&gt;
    Graphics2D g2;&lt;br /&gt;
    g2 = (Graphics2D) g;&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    FontRenderContext frc = g2.getFontRenderContext();&lt;br /&gt;
    Font f = new Font(&amp;quot;Helvetica&amp;quot;, 1, w / 10);&lt;br /&gt;
    String s = new String(&amp;quot;The Starry Night&amp;quot;);&lt;br /&gt;
    TextLayout textTl = new TextLayout(s, f, frc);&lt;br /&gt;
    AffineTransform transform = new AffineTransform();&lt;br /&gt;
    Shape outline = textTl.getOutline(null);&lt;br /&gt;
    Rectangle r = outline.getBounds();&lt;br /&gt;
    transform = g2.getTransform();&lt;br /&gt;
    transform.translate(w / 2 - (r.width / 2), h / 2 + (r.height / 2));&lt;br /&gt;
    g2.transform(transform);&lt;br /&gt;
    g2.setColor(Color.blue);&lt;br /&gt;
    g2.draw(outline);&lt;br /&gt;
    g2.setClip(outline);&lt;br /&gt;
    g2.drawImage(img, r.x, r.y, r.width, r.height, this);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Animate a clipping path to reveal different portions of an image ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.&lt;br /&gt;
 *&lt;br /&gt;
 * Sun grants you (&amp;quot;Licensee&amp;quot;) a non-exclusive, royalty free, license to use,&lt;br /&gt;
 * modify and redistribute this software in source and binary code form,&lt;br /&gt;
 * provided that i) this copyright notice and license appear on all copies of&lt;br /&gt;
 * the software; and ii) Licensee does not utilize the software in a manner&lt;br /&gt;
 * which is disparaging to Sun.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is provided &amp;quot;AS IS,&amp;quot; without a warranty of any kind. ALL&lt;br /&gt;
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY&lt;br /&gt;
 * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR&lt;br /&gt;
 * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE&lt;br /&gt;
 * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING&lt;br /&gt;
 * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS&lt;br /&gt;
 * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,&lt;br /&gt;
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER&lt;br /&gt;
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF&lt;br /&gt;
 * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE&lt;br /&gt;
 * POSSIBILITY OF SUCH DAMAGES.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is not designed or intended for use in on-line control of&lt;br /&gt;
 * aircraft, air traffic, aircraft navigation or aircraft communications; or in&lt;br /&gt;
 * the design, construction, operation or maintenance of any nuclear&lt;br /&gt;
 * facility. Licensee represents and warrants that it will not use or&lt;br /&gt;
 * redistribute the Software for such purposes.&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.event.WindowListener;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Arc2D;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.awt.geom.RoundRectangle2D;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JApplet;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
/**&lt;br /&gt;
 * Animated clipping of an image &amp;amp; shapes with alpha.&lt;br /&gt;
 */&lt;br /&gt;
public class ClipImage extends JApplet implements Runnable {&lt;br /&gt;
  private Image img;&lt;br /&gt;
  private final double OINC[] = { 5.0, 3.0 };&lt;br /&gt;
  private final double SINC[] = { 5.0, 5.0 };&lt;br /&gt;
  private double x, y;&lt;br /&gt;
  private double ix = OINC[0];&lt;br /&gt;
  private double iy = OINC[1];&lt;br /&gt;
  private double iw = SINC[0];&lt;br /&gt;
  private double ih = SINC[1];&lt;br /&gt;
  private double ew, eh; // ellipse width &amp;amp; height&lt;br /&gt;
  private GeneralPath p = new GeneralPath();&lt;br /&gt;
  private AffineTransform at = new AffineTransform();&lt;br /&gt;
  private BasicStroke bs = new BasicStroke(20.0f);&lt;br /&gt;
  private Arc2D arc = new Arc2D.Float();&lt;br /&gt;
  private Ellipse2D ellipse = new Ellipse2D.Float();&lt;br /&gt;
  private RoundRectangle2D roundRect = new RoundRectangle2D.Float();&lt;br /&gt;
  private Rectangle2D rect = new Rectangle2D.Float();&lt;br /&gt;
  private Color redBlend = new Color(255, 0, 0, 120);&lt;br /&gt;
  private Color greenBlend = new Color(0, 255, 0, 120);&lt;br /&gt;
  private Thread thread;&lt;br /&gt;
  private BufferedImage offImg;&lt;br /&gt;
  private int w, h;&lt;br /&gt;
  private boolean newBufferedImage;&lt;br /&gt;
  public void init() {&lt;br /&gt;
    setBackground(Color.white);&lt;br /&gt;
    img = new ImageIcon(&amp;quot;yourFile.gif&amp;quot;).getImage();&lt;br /&gt;
  }&lt;br /&gt;
  public void drawDemo(Graphics2D g2) {&lt;br /&gt;
    if (newBufferedImage) {&lt;br /&gt;
      x = Math.random() * w;&lt;br /&gt;
      y = Math.random() * h;&lt;br /&gt;
      ew = (Math.random() * w) / 2;&lt;br /&gt;
      eh = (Math.random() * h) / 2;&lt;br /&gt;
    }&lt;br /&gt;
    x += ix;&lt;br /&gt;
    y += iy;&lt;br /&gt;
    ew += iw;&lt;br /&gt;
    eh += ih;&lt;br /&gt;
    if (ew &amp;gt; w / 2) {&lt;br /&gt;
      ew = w / 2;&lt;br /&gt;
      iw = Math.random() * -w / 16 - 1;&lt;br /&gt;
    }&lt;br /&gt;
    if (ew &amp;lt; w / 8) {&lt;br /&gt;
      ew = w / 8;&lt;br /&gt;
      iw = Math.random() * w / 16 + 1;&lt;br /&gt;
    }&lt;br /&gt;
    if (eh &amp;gt; h / 2) {&lt;br /&gt;
      eh = h / 2;&lt;br /&gt;
      ih = Math.random() * -h / 16 - 1;&lt;br /&gt;
    }&lt;br /&gt;
    if (eh &amp;lt; h / 8) {&lt;br /&gt;
      eh = h / 8;&lt;br /&gt;
      ih = Math.random() * h / 16 + 1;&lt;br /&gt;
    }&lt;br /&gt;
    if ((x + ew) &amp;gt; w) {&lt;br /&gt;
      x = (w - ew) - 1;&lt;br /&gt;
      ix = Math.random() * -w / 32 - 1;&lt;br /&gt;
    }&lt;br /&gt;
    if (x &amp;lt; 0) {&lt;br /&gt;
      x = 2;&lt;br /&gt;
      ix = Math.random() * w / 32 + 1;&lt;br /&gt;
    }&lt;br /&gt;
    if ((y + eh) &amp;gt; h) {&lt;br /&gt;
      y = (h - eh) - 2;&lt;br /&gt;
      iy = Math.random() * -h / 32 - 1;&lt;br /&gt;
    }&lt;br /&gt;
    if (y &amp;lt; 0) {&lt;br /&gt;
      y = 2;&lt;br /&gt;
      iy = Math.random() * h / 32 + 1;&lt;br /&gt;
    }&lt;br /&gt;
    ellipse.setFrame(x, y, ew, eh);&lt;br /&gt;
    g2.setClip(ellipse);&lt;br /&gt;
    rect.setRect(x + 5, y + 5, ew - 10, eh - 10);&lt;br /&gt;
    g2.clip(rect);&lt;br /&gt;
    g2.drawImage(img, 0, 0, w, h, this);&lt;br /&gt;
    p.reset();&lt;br /&gt;
    p.moveTo(-w / 2.0f, -h / 8.0f);&lt;br /&gt;
    p.lineTo(+w / 2.0f, -h / 8.0f);&lt;br /&gt;
    p.lineTo(-w / 4.0f, +h / 2.0f);&lt;br /&gt;
    p.lineTo(+0.0f, -h / 2.0f);&lt;br /&gt;
    p.lineTo(+w / 4.0f, +h / 2.0f);&lt;br /&gt;
    p.closePath();&lt;br /&gt;
    at.setToIdentity();&lt;br /&gt;
    at.translate(w * .5f, h * .5f);&lt;br /&gt;
    g2.transform(at);&lt;br /&gt;
    g2.setStroke(bs);&lt;br /&gt;
    g2.setPaint(redBlend);&lt;br /&gt;
    g2.draw(p);&lt;br /&gt;
    at.setToIdentity();&lt;br /&gt;
    g2.setTransform(at);&lt;br /&gt;
    g2.setPaint(greenBlend);&lt;br /&gt;
    for (int yy = 0; yy &amp;lt; h; yy += 50) {&lt;br /&gt;
      for (int xx = 0, i = 0; xx &amp;lt; w; i++, xx += 50) {&lt;br /&gt;
        switch (i) {&lt;br /&gt;
        case 0:&lt;br /&gt;
          arc.setArc(xx, yy, 25, 25, 45, 270, Arc2D.PIE);&lt;br /&gt;
          g2.fill(arc);&lt;br /&gt;
          break;&lt;br /&gt;
        case 1:&lt;br /&gt;
          ellipse.setFrame(xx, yy, 25, 25);&lt;br /&gt;
          g2.fill(ellipse);&lt;br /&gt;
          break;&lt;br /&gt;
        case 2:&lt;br /&gt;
          roundRect.setRoundRect(xx, yy, 25, 25, 4, 4);&lt;br /&gt;
          g2.fill(roundRect);&lt;br /&gt;
          break;&lt;br /&gt;
        case 3:&lt;br /&gt;
          rect.setRect(xx, yy, 25, 25);&lt;br /&gt;
          g2.fill(rect);&lt;br /&gt;
          i = -1;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public Graphics2D createDemoGraphics2D(Graphics g) {&lt;br /&gt;
    Graphics2D g2 = null;&lt;br /&gt;
    if (offImg == null || offImg.getWidth() != w || offImg.getHeight() != h) {&lt;br /&gt;
      offImg = (BufferedImage) createImage(w, h);&lt;br /&gt;
      newBufferedImage = true;&lt;br /&gt;
    }&lt;br /&gt;
    if (offImg != null) {&lt;br /&gt;
      g2 = offImg.createGraphics();&lt;br /&gt;
      g2.setBackground(getBackground());&lt;br /&gt;
    }&lt;br /&gt;
    // .. set attributes ..&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    // .. clear canvas ..&lt;br /&gt;
    g2.clearRect(0, 0, w, h);&lt;br /&gt;
    return g2;&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    w = getWidth();&lt;br /&gt;
    h = getHeight();&lt;br /&gt;
    if (w &amp;lt;= 0 || h &amp;lt;= 0)&lt;br /&gt;
      return;&lt;br /&gt;
    Graphics2D g2 = createDemoGraphics2D(g);&lt;br /&gt;
    drawDemo(g2);&lt;br /&gt;
    g2.dispose();&lt;br /&gt;
    if (offImg != null &amp;amp;&amp;amp; isShowing()) {&lt;br /&gt;
      g.drawImage(offImg, 0, 0, this);&lt;br /&gt;
    }&lt;br /&gt;
    newBufferedImage = false;&lt;br /&gt;
  }&lt;br /&gt;
  public void start() {&lt;br /&gt;
    thread = new Thread(this);&lt;br /&gt;
    thread.start();&lt;br /&gt;
  }&lt;br /&gt;
  public synchronized void stop() {&lt;br /&gt;
    thread = null;&lt;br /&gt;
  }&lt;br /&gt;
  public void run() {&lt;br /&gt;
    Thread me = Thread.currentThread();&lt;br /&gt;
    while (thread == me &amp;amp;&amp;amp; isShowing()) {&lt;br /&gt;
      Graphics g = getGraphics();&lt;br /&gt;
      paint(g);&lt;br /&gt;
      g.dispose();&lt;br /&gt;
      thread.yield();&lt;br /&gt;
    }&lt;br /&gt;
    thread = null;&lt;br /&gt;
  }&lt;br /&gt;
  protected URL getURL(String filename) {&lt;br /&gt;
    URL codeBase = this.getCodeBase();&lt;br /&gt;
    URL url = null;&lt;br /&gt;
    try {&lt;br /&gt;
      url = new URL(codeBase, filename);&lt;br /&gt;
    } catch (java.net.MalformedURLException e) {&lt;br /&gt;
      System.out.println(&amp;quot;Couldn&amp;quot;t create image: &amp;quot; + &amp;quot;badly specified URL&amp;quot;);&lt;br /&gt;
      return null;&lt;br /&gt;
    }&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String s[]) {&lt;br /&gt;
    final ClipImage demo = new ClipImage();&lt;br /&gt;
    WindowListener l = new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
      public void windowDeiconified(WindowEvent e) {&lt;br /&gt;
        demo.start();&lt;br /&gt;
      }&lt;br /&gt;
      public void windowIconified(WindowEvent e) {&lt;br /&gt;
        demo.stop();&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    JFrame f = new JFrame(&amp;quot;Java 2D Demo - ClipImage&amp;quot;);&lt;br /&gt;
    f.addWindowListener(l);&lt;br /&gt;
    f.getContentPane().add(&amp;quot;Center&amp;quot;, demo);&lt;br /&gt;
    f.setSize(new Dimension(400, 300));&lt;br /&gt;
    f.show();&lt;br /&gt;
    demo.start();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Clip between Rectangle and Ellipse2D ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class ClipBetweenRectangleEllipse2D extends JFrame {&lt;br /&gt;
  public ClipBetweenRectangleEllipse2D() {&lt;br /&gt;
    getContentPane().add(new DrawingCanvas());&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    setSize(500, 500);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String arg[]) {&lt;br /&gt;
    new ClipBetweenRectangleEllipse2D();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class DrawingCanvas extends JPanel {&lt;br /&gt;
  DrawingCanvas() {&lt;br /&gt;
    setSize(300, 300);&lt;br /&gt;
    setBackground(Color.white);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2D = (Graphics2D) g;&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    int w = getSize().width;&lt;br /&gt;
    int h = getSize().height;&lt;br /&gt;
    Ellipse2D e = new Ellipse2D.Float(w / 4.0f, h / 4.0f, w / 2.0f, h / 2.0f);&lt;br /&gt;
    g2.setClip(e);&lt;br /&gt;
    g2.setColor(Color.red);&lt;br /&gt;
    g2.fillRect(0, 0, w, h);&lt;br /&gt;
    Rectangle r = new Rectangle(w/2, h/2, w/2, h/2);&lt;br /&gt;
    g2.clip(r);&lt;br /&gt;
    g2.setColor(Color.green);&lt;br /&gt;
    g2.fillRect(0, 0, w, h);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Clip Demo ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
public class MainClass extends Frame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    (new MainClass()).setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public MainClass() {&lt;br /&gt;
    setSize(250, 250);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    Ellipse2D e = new Ellipse2D.Float(10, 10, 200, 200);&lt;br /&gt;
    g2d.clip(e);&lt;br /&gt;
    g2d.fillRect(40, 60, 500, 500);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Clipping is restricting of drawing to a certain area. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class Clipping extends JPanel implements ActionListener {&lt;br /&gt;
  int x = 8, y = 8, radius = 90;&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  Image image = new ImageIcon(&amp;quot;yourImage.png&amp;quot;).getImage();&lt;br /&gt;
  double delta[] = { 3, 3 };&lt;br /&gt;
  public Clipping() {&lt;br /&gt;
    timer = new Timer(15, this);&lt;br /&gt;
    timer.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setClip(new Ellipse2D.Double(x, y, radius, radius));&lt;br /&gt;
    g2d.drawImage(image, 5, 5, null);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.add(new Clipping());&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setSize(400, 400);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    int w = 400;&lt;br /&gt;
    int h = 400;&lt;br /&gt;
    if (x &amp;lt; 0) {&lt;br /&gt;
      delta[0] = Math.random() % 4 + 5;&lt;br /&gt;
    } else if (x &amp;gt; w - radius) {&lt;br /&gt;
      delta[0] = -(Math.random() % 4 + 5);&lt;br /&gt;
    }&lt;br /&gt;
    if (y &amp;lt; 0) {&lt;br /&gt;
      delta[1] = Math.random() % 4 + 5;&lt;br /&gt;
    } else if (y &amp;gt; h - radius) {&lt;br /&gt;
      delta[1] = -(Math.random() % 4 + 5);&lt;br /&gt;
    }&lt;br /&gt;
    x += delta[0];&lt;br /&gt;
    y += delta[1];&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Setting the Clipping Area with a Shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class BasicDraw {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new BasicDraw();&lt;br /&gt;
  }&lt;br /&gt;
  BasicDraw() {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.add(new MyComponent());&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyComponent extends JComponent {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    Shape shape = new java.awt.geom.Ellipse2D.Float(20, 20, 200,200);&lt;br /&gt;
    g2d.setClip(shape);&lt;br /&gt;
    int x = 0;&lt;br /&gt;
    int y = 0;&lt;br /&gt;
    g2d.drawImage(new ImageIcon(&amp;quot;a.png&amp;quot;).getImage(), x, y, this);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>