All Downloads are FREE. Search and download functionalities are using the official Maven repository.

marvin.io.MarvinImageIO Maven / Gradle / Ivy

The newest version!
/**
Marvin Project <2007-2013>
http://www.marvinproject.org

License information:
http://marvinproject.sourceforge.net/en/license.html

Discussion group:
https://groups.google.com/forum/#!forum/marvin-project
*/

package marvin.io;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.event.IIOReadWarningListener;
import javax.imageio.stream.ImageInputStream;

import marvin.image.MarvinImage;
import marvin.util.MarvinErrorHandler;

/**
 * Methods to load and save images.
 * @author Danilo Roseto Munoz
 * @author Fabio Andrijaukas
 * @author Gabriel Ambrosio Archanjo
 */
public class MarvinImageIO {
	
	/**
	 * Loads a MarvinImage from a filesystem path.
	 * @param a_filePath	- image�s path
	 * @return
	 */
	public static MarvinImage loadImage(String a_filePath){
		MarvinImage l_marvinImage = null;
		BufferedImage l_bufferedImage=null;
		ImageInputStream l_imageInputStream = null;
		
		//1. Load File
		File l_file = new File(a_filePath);
		
		if(!l_file.exists()){
			throw MarvinErrorHandler.handle(MarvinErrorHandler.TYPE.ERROR_FILE_NOT_FOUND,a_filePath);
		}
		
		// 2. Create ImageReader
		Iterator l_ittReaders = ImageIO.getImageReadersByFormatName(a_filePath.substring(a_filePath.lastIndexOf(".") + 1));
		ImageReader l_reader = (ImageReader) l_ittReaders.next();
		
		l_reader.addIIOReadWarningListener(new IIOReadWarningListener() {
			public void warningOccurred(ImageReader source, String warning) {
				MarvinErrorHandler.handleDialog(MarvinErrorHandler.TYPE.BAD_FILE, warning);
			}
		});		
		
		// 3. Load image
		try{
			l_imageInputStream = ImageIO.createImageInputStream(l_file);
			l_reader.setInput(l_imageInputStream);
			l_bufferedImage = l_reader.read(0);
		}catch(Exception e){
			throw MarvinErrorHandler.handle(MarvinErrorHandler.TYPE.ERROR_FILE_OPEN, a_filePath, e);
			
			//MarvinErrorHandler.handle(, e);
			//return null;
		} finally{
			if(l_imageInputStream != null){
				try{	l_imageInputStream.close();	}catch(Exception e){/*nothing to do */};
			}
		}
		
		// 4. Get format
		String l_format = "";
		try{
			l_format = l_reader.getFormatName();
		} catch(IOException e){
			e.printStackTrace();
			return null;
		}
		
		// 5. Create MarvinImage object
		l_marvinImage = new MarvinImage(l_bufferedImage, l_format);
		return l_marvinImage;
	}
	
	/**
	 * Saves a MarvinImage via file system path. 
	 * @param marvinImage	- MarvinImage object
	 * @param filePath	- file path
	 */
	public static void saveImage(MarvinImage marvinImage, String filePath){
		marvinImage.update();
		File l_file = new File(filePath);
		
		try{
			if(filePath.toUpperCase().endsWith(".JPEG") || filePath.toUpperCase().endsWith(".JPG") ){
				ImageIO.write(marvinImage.getBufferedImageNoAlpha(),  "JPEG", l_file);
			}
			else{
				ImageIO.write(marvinImage.getBufferedImage(),  filePath.substring(filePath.lastIndexOf('.')+1), l_file);
			}
			
		} catch(Exception e){
			throw MarvinErrorHandler.handle(MarvinErrorHandler.TYPE.ERROR_FILE_SAVE, filePath, e);
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy