Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

BufferedImage with Jumbled images

/*  * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  *  *   - Redistributions of source code must retain the above copyright  *     notice, this list of conditions and the following disclaimer.  *  *   - Redistributions in binary form must reproduce the above copyright  *     notice, this list of conditions and the following disclaimer in the  *     documentation and/or other materials provided with the distribution.  *  *   - Neither the name of Sun Microsystems nor the names of its  *     contributors may be used to endorse or promote products derived  *     from this software without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */  import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; import java.util.Random; class JumbledImage extends Component {     private int numlocs = 2;     private int numcells = numlocs*numlocs;     private int[] cells;     private BufferedImage bi;     int w, h, cw, ch;          public JumbledImage(URL imageSrc) {         try {             bi = ImageIO.read(imageSrc);             w = bi.getWidth(null);             h = bi.getHeight(null);         } catch (IOException e) {             System.out.println("Image could not be read");             System.exit(1);         }         cw = w/numlocs;         ch = h/numlocs;         cells = new int[numcells];         for (int i=0;i<numcells;i++) {             cells[i] = i;         }     }     void jumble() {         Random rand = new Random();         int ri;         for (int i=0; i<numcells; i++) {             while ((ri = rand.nextInt(numlocs)) == i);             int tmp = cells[i];             cells[i] = cells[ri];             cells[ri] = tmp;         }     }     public Dimension getPreferredSize() {         return new Dimension(w, h);     }     public void paint(Graphics g) {         int dx, dy;         for (int x=0; x<numlocs; x++) {             int sx = x*cw;             for (int y=0; y<numlocs; y++) {                 int sy = y*ch;                 int cell = cells[x*numlocs+y];                 dx = (cell / numlocs) * cw;                 dy = (cell % numlocs) * ch;                 g.drawImage(bi,                             dx, dy, dx+cw, dy+ch,                             sx, sy, sx+cw, sy+ch,                             null);             }         }     } } public class JumbledImageApplet extends JApplet {     static String imageFileName = "duke_skateboard.jpg";     private URL imageSrc;     private JumbledImage jumbledImage;     public JumbledImageApplet () {     }     public JumbledImageApplet (URL imageSrc) {         this.imageSrc = imageSrc;     }     public void init() {         try {             imageSrc = new URL(getCodeBase(), imageFileName);         } catch (MalformedURLException e) {         }         buildUI();     }           public void buildUI() {         final JumbledImage ji = new JumbledImage(imageSrc);         add("Center", ji);         JButton jumbleButton = new JButton("Jumble");         jumbleButton.addActionListener(new ActionListener() {                 public void actionPerformed(ActionEvent e) {                     JButton b = (JButton)e.getSource();                     ji.jumble();                     ji.repaint();                 };             });         Dimension jumbleSize = ji.getPreferredSize();         resize(jumbleSize.width, jumbleSize.height+40);         add("South", jumbleButton);     }     public static void main(String s[]) {         JFrame f = new JFrame("Jumbled Image");         f.addWindowListener(new WindowAdapter() {             public void windowClosing(WindowEvent e) {System.exit(0);}         });         URL imageSrc = null;         try {              imageSrc = ((new File(imageFileName)).toURI()).toURL();         } catch (MalformedURLException e) {         }         JumbledImageApplet jumbler = new JumbledImageApplet(imageSrc);         jumbler.buildUI();         f.add("Center", jumbler);         f.pack();         f.setVisible(true);     } }