import java.io.*; import java.awt.*; import java.awt.image.*; import java.awt.image.ImageProducer; /* This code was written by Jeff West and John Mitchell and copied directly from: * http://www.javaworld.com/javaworld/javatips/jw-javatip43.html * Works with maps created by Mike Rotondo's and David Sloan's map generator * The BMP must be in 24 bit format * */ public class mazeConvert{ public static void main(String [] args){ Image image; try{ FileInputStream fs=new FileInputStream(args[0]); int bflen=14; // 14 byte BITMAPFILEHEADER byte bf[]=new byte[bflen]; fs.read(bf,0,bflen); int bilen=40; // 40-byte BITMAPINFOHEADER byte bi[]=new byte[bilen]; fs.read(bi,0,bilen); //find bitcount int nbitcount = (((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff; if(nbitcount==24){ //find height int nheight = (((int)bi[11]&0xff)<<24) | (((int)bi[10]&0xff)<<16) | (((int)bi[9]&0xff)<<8) | (int)bi[8]&0xff; //find width int nwidth = (((int)bi[7]&0xff)<<24) | (((int)bi[6]&0xff)<<16) | (((int)bi[5]&0xff)<<8) | (int)bi[4]&0xff; System.out.println((nheight - 2)+ " " +(nwidth-2)); //image size int nsizeimage = (((int)bi[23]&0xff)<<24) | (((int)bi[22]&0xff)<<16) | (((int)bi[21]&0xff)<<8) | (int)bi[20]&0xff; int npad = (nsizeimage / nheight) - nwidth * 3; int ndata[] = new int [nheight * nwidth]; int ndataBetter[][] = new int[nheight][nwidth]; byte brgb[] = new byte [( nwidth + npad) * 3 * nheight]; fs.read (brgb, 0, (nwidth + npad) * 3 * nheight); int nindex = 0; //Identify the color of each bit for (int j = 0; j < nheight; j++){ for (int i = 0; i < nwidth; i++){ ndataBetter[i][j] = (255&0xff)<<24 | (((int)brgb[nindex+2]&0xff)<<16) | (((int)brgb[nindex+1]&0xff)<<8) | (int)brgb[nindex]&0xff; nindex += 3; } nindex += npad; } int startR, startC, endR, endC; startR = startC = endR = endC = 0; //Match colors to numbers //String maze = ""; for (int j = nheight-2; j >= 1; j--) { String maze = ""; for (int i = 1; i< nwidth-1 ; i++){ if(ndataBetter[i][j] == -1){ maze = maze + "0"; }else{ if(ndataBetter[i][j] == -16777216){ maze = maze + "1"; }else{ if(ndataBetter[i][j] == -16776961){ maze = maze + "2"; startR = j-4 +nheight; startC = i-1; }else{ if(ndataBetter[i][j] == -16711936 ){ maze = maze + "3"; endR = j+2 - nheight; endC = i-1; } } } } } System.out.println(maze); } //System.out.print(maze); System.out.println(startR + " " + startC); System.out.println(endR + " " + endC); }else{ System.out.println ("Bitmap must be in 24 bit format"); } fs.close(); } catch (Exception e){ System.out.println("Caught exception in loadbitmap!"); } } }