It is currently Sat Dec 16, 2017 10:15 pm

All times are UTC + 9:30 hours




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: ReTile Code
PostPosted: Sat Jan 26, 2008 2:50 pm 
Offline
User avatar

Joined: Fri Jun 23, 2006 2:34 pm
Posts: 3761
Location: Tennessee
http://forums.customwars.com/viewtopic.php?t=8306

Here's the code:
Code:
/*
 * Main.java
 * Written by: Clinton Nolan
 * Created on May 31, 2007, 8:42 PM
 *
 * The main program, creates the environment and passes control over to PlayArea
 */
package retile;
import javax.swing.*;
import java.awt.event.*;
public class Main {
   
    public static void main(String[] args) {
        //PLACE ANY GLOBAL INITIALIZATIONS HERE
       
        //sets up game window
        JFrame frame = new JFrame("ReTile");
        frame.setSize(800,600);
        //starts play area creation
        PlayArea pa = new PlayArea(frame);
        frame.add(pa);
        //set other things and display window
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.validate();
        frame.setVisible(true);
        frame.pack();
    }
}
Code:
/*
 * PlayArea.java
 * Created on February 12, 2007, 8:06 PM
 * Written by: Clinton Nolan
 *
 * The real main class of the program, contains the graphics and control code
 */
package retile;
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.event.MouseInputListener;
import java.io.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.imageio.*;

public class PlayArea extends JComponent{
    private static JFrame parentFrame;             //the frame that contains the window
    private static BufferedImage bimg;             //the screen, used for double buffering and scaling
    private static KeyControl keycontroller;       //the KeyControl, used to remove the component
    private static MouseControl mousecontroller;   //the MouseControl, used to remove the component
   
    private static Image mainImage;
    private static Image bgImage;
    private static BufferedImage altImage;
    private int tilew = 8;
    private int tileh = 32;
    private int srcw = 1;
    private int srch = 256;
    private int pxw = 8;
    private int pxh = 8;
    private boolean info = false;
    private boolean background = false;
   
    /** Creates a new instance of BattleScreen */
    public PlayArea(JFrame f){
        //makes the panel opaque, and thus visible
        this.setOpaque(true);
       
        //KeyControl is registered with the parent frame
        keycontroller = new KeyControl(this);
        f.addKeyListener(keycontroller);
        //MouseControl is registered with the parent frame
        mousecontroller = new MouseControl();
        f.addMouseListener(mousecontroller);
        f.addMouseMotionListener(mousecontroller);
        parentFrame = f;
       
        JFileChooser fc = new JFileChooser();
        fc.setDialogTitle("Load Image");
        fc.setCurrentDirectory(new File("./"));
        fc.setApproveButtonText("Load");
        FileNameExtensionFilter filter = new FileNameExtensionFilter(
                "Images", "gif", "png", "jpg", "jpeg", "bmp");
        fc.setFileFilter(filter);
        int returnVal = fc.showOpenDialog(this);
       
        if(returnVal != 1){
            String loadFilename = fc.getSelectedFile().getPath();
            mainImage = new ImageIcon(loadFilename).getImage();
        }
       
        bgImage = new ImageIcon("background.png").getImage();
    }
   
    //called in response to this.repaint();
    public void paintComponent(Graphics g) {
        //clears the background
        super.paintComponent(g);
       
        //converts to Graphics2D
        Dimension d = getSize();
        Graphics2D g2 = createGraphics2D(d.width, d.height);
        //g2.scale(scale,scale);
       
        drawScreen(g2);
        g2.dispose();
        g.drawImage(bimg, 0, 0, this);
    }
   
    //tells the GUI what size the window is
    public Dimension getPreferredSize(){
        return new Dimension(800,600);
    }
   
    //makes a Graphics2D object of the given size
    public Graphics2D createGraphics2D(int w, int h) {
        Graphics2D g2 = null;
        if (bimg == null || bimg.getWidth() != w || bimg.getHeight() != h) {
            bimg = (BufferedImage) createImage(w, h);
        }
        g2 = bimg.createGraphics();
        g2.setBackground(getBackground());
        g2.clearRect(0, 0, w, h);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
        return g2;
    }
   
    //Draws the screen
    public void drawScreen(Graphics2D g){
        drawBackground(g);
       
        //draw code goes here
        drawMainImage(g);
       
        this.repaint();
    }
   
    //draws the background
    public void drawBackground(Graphics2D g){
        //draw a green background
        g.setColor(Color.white);
        Dimension d = getSize();
        if(background)g.drawImage(bgImage,0,0,this);
        else g.fillRect(0,0,d.width,d.height);
    }
   
    public void drawMainImage(Graphics2D g){
        altImage = retile(g,mainImage,pxw,pxh,srcw,srch,tilew,tileh,this);
        g.drawImage(altImage,null,0,0);
        if(info){
            g.setColor(Color.RED);
            g.setFont(new Font("sanserif", Font.PLAIN, 16));
            g.drawString("Tile: "+pxw+","+pxh,300,260);
            g.drawString("Input: "+srcw+","+srch,300,280);
            g.drawString("Output: "+tilew+","+tileh,300,300);
        }
    }
   
    //does the actual re-tile
    //g = a graphics context     src = source image
    //pw = pixel width of tile   ph = pixel height of tile
    //sw = tile width of source  sh = tile height of source
    //ow = tile width of output  oh = tile height of output
    //io = an image observer
    public BufferedImage retile(Graphics2D g, Image src, int pw, int ph, int sw, int sh, int ow, int oh, ImageObserver io){
        BufferedImage dest = new BufferedImage(pw*ow,ph*oh,BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = dest.createGraphics();
        int dx = 0;
        int dy = 0;
        for(int i=0; i < sh; i++){
            for(int j=0; j < sw; j++){
                int sx = j*pw;
                int sy = i*ph;
                g2.drawImage(src,dx,dy,dx+pw,dy+ph,sx,sy,sx+pw,sy+ph,this);
                dx += pw;
                if(dx >= ow*pw){
                    dx = 0;
                    dy += ph;
                }
            }
        }
        return dest;
    }
   
    //remove the component from the frame
    //useful for replacing this PlayArea with a different one
    public void removeFromFrame(){
        parentFrame.getContentPane().remove(this);
        parentFrame.removeKeyListener(keycontroller);
        parentFrame.removeMouseListener(mousecontroller);
        parentFrame.removeMouseMotionListener(mousecontroller);
    }
   
    //This class deals with keypresses
    class KeyControl implements KeyListener{
        PlayArea parentScreen;
       
        public KeyControl(PlayArea b){
            super();
            parentScreen=b;
        }
       
        public void keyTyped(KeyEvent e) {}
       
        public void keyPressed(KeyEvent e) {
            switch(e.getKeyCode()){
                //turn info on and off
                case KeyEvent.VK_N:
                    if(info)info = false;
                    else info = true;
                    break;
                   
                    //load a file
                case KeyEvent.VK_P:
                    JFileChooser fc = new JFileChooser();
                    fc.setDialogTitle("Load Image");
                    fc.setCurrentDirectory(new File("./"));
                    fc.setApproveButtonText("Load");
                    FileNameExtensionFilter filter = new FileNameExtensionFilter(
                            "Images", "gif", "png", "jpg", "jpeg", "bmp");
                    fc.setFileFilter(filter);
                    int returnVal = fc.showOpenDialog(parentScreen);
                   
                    if(returnVal != 1){
                        String loadFilename = fc.getSelectedFile().getPath();
                        mainImage = new ImageIcon(loadFilename).getImage();
                    }
                    break;
                   
                    //output a file
                case KeyEvent.VK_O:
                    JFileChooser fc2 = new JFileChooser();
                    fc2.setDialogTitle("Save Image");
                    fc2.setCurrentDirectory(new File("./"));
                    fc2.setApproveButtonText("Save");
                    int retVal = fc2.showOpenDialog(parentScreen);
                   
                    if(retVal != 1){
                        String saveFilename = fc2.getSelectedFile().getPath();
                        File saveFile = new File(saveFilename);
                        if(saveFile.exists()){
                            System.out.println("File Exists, aborting save");
                            break;
                        }
                        String type = saveFilename.substring(saveFilename.length()-3);
                        if(!(type.equals("png")||type.equals("gif")||type.equals("jpg")||type.equals("bmp"))){
                            System.out.println("Invalid File Type");
                            break;
                        }
                        try{
                            ImageIO.write(altImage,type,saveFile);
                        }catch(IOException e1){
                            System.err.println(e1);
                        }
                        System.out.println("File Saved as "+saveFilename);
                    }
                    break;
                   
                case KeyEvent.VK_M:
                    String input = JOptionPane.showInputDialog("Tile Pixel Width?");
                    int temp = Integer.parseInt(input);
                    if(temp>0)pxw = temp;
                    input = JOptionPane.showInputDialog("Tile Pixel Height?");
                    temp = Integer.parseInt(input);
                    if(temp>0)pxh = temp;
                    input = JOptionPane.showInputDialog("Input Tile Width?");
                    temp = Integer.parseInt(input);
                    if(temp>0)srcw = temp;
                    input = JOptionPane.showInputDialog("Input Tile Height?");
                    temp = Integer.parseInt(input);
                    if(temp>0)srch = temp;
                    input = JOptionPane.showInputDialog("Output Tile Width?");
                    temp = Integer.parseInt(input);
                    if(temp>0)tilew = temp;
                    input = JOptionPane.showInputDialog("Output Tile Height?");
                    temp = Integer.parseInt(input);
                    if(temp>0)tileh = temp;
                    break;
                   
                case KeyEvent.VK_B:
                    if(background)background = false;
                    else background = true;
                    break;
                   
                    //OUTPUT SIZE
                case KeyEvent.VK_LEFT:
                    tilew--;
                    if(tilew < 1)tilew = 1;
                    break;
                case KeyEvent.VK_RIGHT:
                    tilew++;
                    break;
                case KeyEvent.VK_UP:
                    tileh--;
                    if(tileh < 1)tileh = 1;
                    break;
                case KeyEvent.VK_DOWN:
                    tileh++;
                    break;
                   
                    //INPUT SIZE
                case KeyEvent.VK_A:
                    srcw--;
                    if(srcw < 1)srcw = 1;
                    break;
                case KeyEvent.VK_D:
                    srcw++;
                    break;
                case KeyEvent.VK_W:
                    srch--;
                    if(srch < 1)srch = 1;
                    break;
                case KeyEvent.VK_S:
                    srch++;
                    break;
                   
                    //TILE SIZE
                case KeyEvent.VK_J:
                    pxw--;
                    if(pxw < 1)pxw = 1;
                    break;
                case KeyEvent.VK_L:
                    pxw++;
                    break;
                case KeyEvent.VK_I:
                    pxh--;
                    if(pxh < 1)pxh = 1;
                    break;
                case KeyEvent.VK_K:
                    pxh++;
                    break;
            }
        }
       
        public void keyReleased(KeyEvent e) {}
    }
   
    class MouseControl implements MouseInputListener{
        //private final int MENU_SIZE = 23;
        public void mouseClicked(MouseEvent e){
            int x = e.getX() - parentFrame.getInsets().left;
            int y = e.getY() - parentFrame.getInsets().top;
            //int y = e.getY() - parentFrame.getInsets().top - MENU_SIZE;
           
           
            if(e.getButton() == e.BUTTON1){
                //first mouse button
            }else{
               
            }
        }
       
        public void mouseEntered(MouseEvent e) {}
       
        public void mouseExited(MouseEvent e) {}
       
        public void mousePressed(MouseEvent e) {
            int x = e.getX() - parentFrame.getInsets().left;
            int y = e.getY() - parentFrame.getInsets().top;
            //int y = e.getY() - parentFrame.getInsets().top - MENU_SIZE;
           
            if(e.getButton() == e.BUTTON1){
               
            }else{
               
            }
        }
       
        public void mouseReleased(MouseEvent e) {
            int x = e.getX() - parentFrame.getInsets().left;
            int y = e.getY() - parentFrame.getInsets().top;
            //int y = e.getY() - parentFrame.getInsets().top - MENU_SIZE;
           
           
           
            if(e.getButton() == e.BUTTON1){
                //first mouse button
            }else{
               
            }
        }
       
        public void mouseDragged(MouseEvent e) {
            int x = e.getX() - parentFrame.getInsets().left;
            int y = e.getY() - parentFrame.getInsets().top;
            //int y = e.getY() - parentFrame.getInsets().top - MENU_SIZE;
           
        }
       
        public void mouseMoved(MouseEvent e) {}
    }
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC + 9:30 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Blue Moon by Trent © 2007
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group