content: /*
   * Copyright (C) 2010-2014 Andreas Maier
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  package edu.stanford.rsl.conrad.io;
  
  import ij.io.TiffDecoder;
  
  import java.io.BufferedInputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.InputStream;
  
  import org.junit.Test;
  
  import edu.stanford.rsl.conrad.pipeline.ProjectionSource;
  import edu.stanford.rsl.conrad.utils.FileUtil;
  
  /**
   * Wrapper for a tif reader using imageJ. Do not use this file format, if you have big files. The tif decoder wraps the stream into a RandomAccessStream which copies everything for later access. Use of this file format will double the memory usage for reading!
   * @author akmaier
   *
   */
  public class TiffProjectionSource extends FileProjectionSource {
  
  	String fileName;
  	
  	@Override
  	public void initStream (String filename) throws IOException{
  		if (!(filename.toLowerCase().endsWith("tif") || filename.toLowerCase().endsWith("tiff"))) throw new RuntimeException("TiffProjectionSource:Not a tiff file!");
  		File file = new File(filename);
  		fileName = file.getName();
  		if (fileName==null)
  			return;
  		BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  		initStream(inputStream);
  	}
  
  	public void initStream(InputStream inputStream) throws IOException{
  		TiffDecoder td = new TiffDecoder(inputStream, fileName);
  		fi = td.getTiffInfo()[0];
  		if (fi!=null && fi.width>0 && fi.height>0 && fi.offset>0) {
  			init();
  		} else {
  			throw new IOException("Format does not match");
  		}
  	}
  	
  	@Test
  	public void testProjectionSource(){
  		// Test to read a large TIFF File. Result is that the memory access increases twice as much as it should to to ImageJ's RandomAccessStream! 
  		// akmaier
  		try {
  			String filenameString = FileUtil.myFileChoose(".tif", false);
  			ProjectionSource test = FileProjectionSource.openProjectionStream(filenameString);
  			while(test.getNextProjection() != null){
  				System.out.println("Read Projection " + test.getCurrentProjectionNumber());
  			}
  		} catch (Exception e) {
  			// TODO Auto-generated catch block
  			e.printStackTrace();
  		}
  	}
  	
  }
  