content: package edu.stanford.rsl.tutorial.basics;
  
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.io.FileReader;
  import java.io.IOException;
  
  import edu.stanford.rsl.conrad.data.numeric.Grid3D;
  import edu.stanford.rsl.conrad.utils.ImageUtil;
  import ij.ImageJ;
  import ij.ImagePlus;
  import ij.io.FileInfo;
  import ij.io.FileOpener;
  
  public class MHDImageLoader {
  
  
  
  	public MHDImageLoader() {	
  
  
  	}
  
  	public Grid3D loadImage(String MHDfilename){
  		int width = 512;
  		int height = 512;
  		int offset = 0;
  		int nImages = 500;
  		int fileType = FileInfo.GRAY16_UNSIGNED;
  		boolean intelByteOrder = true;
  		double offsets [] = null;
  		double spacings []  = null;
  		String datafile = "";
  
  		try {
  			BufferedReader br = new BufferedReader(new FileReader(MHDfilename));
  			String line = "a";
  			while (line != null){
  				line = br.readLine();
  				//System.out.println(line);
  				if (line != null ) {
  					String [] split = line.split(" = ");
  					if (line.contains("BinaryDataByteOrderMSB")){
  						boolean value = Boolean.parseBoolean(split[1]);
  						intelByteOrder = !value;
  					}
  					if (line.contains("Offset")){
  						String [] split2 = split[1].split(" ");
  						offsets = new double [split2.length];
  						for (int i=0; i < split2.length; i++){
  							offsets[i] = Double.parseDouble(split2[i]);
  						}
  					}
  					if (line.contains("ElementSpacing")){
  						String [] split2 = split[1].split(" ");
  						spacings = new double [split2.length];
  						for (int i=0; i < split2.length; i++){
  							spacings[i] = Double.parseDouble(split2[i]);
  						}
  					}
  					if (line.contains("DimSize")){
  						String [] split2 = split[1].split(" ");
  						width = Integer.parseInt(split2[0]);
  						height = Integer.parseInt(split2[1]);
  						nImages = Integer.parseInt(split2[2]);
  					}
  					if (line.contains("ElementType")){
  						if (split[1].equals("MET_USHORT")) fileType = FileInfo.GRAY16_UNSIGNED;
  					}
  					if (line.contains("ElementDataFile")){
  						datafile = split[1];
  					}
  				}
  			}
  			br.close();
  		} catch (FileNotFoundException e) {
  			e.printStackTrace();
  		} catch (IOException e) {
  			// TODO Auto-generated catch block
  			e.printStackTrace();
  		}
  
  
  		FileInfo fi = new FileInfo();
  		fi.width = width;
  		fi.height = height;
  		fi.offset = offset;
  		fi.nImages = nImages;
  		fi.fileType = fileType;
  		fi.intelByteOrder = intelByteOrder;
  		fi.fileFormat = FileInfo.RAW;
  		fi.fileName = datafile;
  		fi.directory = new File(MHDfilename).getParent();
  		
  		ImagePlus img = new FileOpener(fi).open(false);
  		
  		Grid3D grid = ImageUtil.wrapImagePlus(img, false, true);
  
  		//grid.setOrigin(offsets);
  		grid.setSpacing(spacings);
  		return grid;
  	}
  
  	public static void main(String [] args){
  		new ImageJ();
  		MHDImageLoader loader = new MHDImageLoader();
  		
  		Grid3D image = loader.loadImage(args[0]);
  		image.show("Loaded Data");
  	}
  
  }
  