diff common/src/main/java/digilib/image/DocuImageImpl.java @ 903:7779b37d1d05

refactored into maven modules per servlet type. can build servlet-api 2.3 and 3.0 via profile now!
author robcast
date Tue, 26 Apr 2011 20:24:31 +0200
parents servlet/src/main/java/digilib/image/DocuImageImpl.java@ba1eb2d821a2
children 28d007673346
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/src/main/java/digilib/image/DocuImageImpl.java	Tue Apr 26 20:24:31 2011 +0200
@@ -0,0 +1,199 @@
+/* DocuImage -- General image interface class implementation
+
+  Digital Image Library servlet components
+
+  Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de)
+
+  This program is free software; you can redistribute  it and/or modify it
+  under  the terms of  the GNU General  Public License as published by the
+  Free Software Foundation;  either version 2 of the  License, or (at your
+  option) any later version.
+   
+  Please read license.txt for the full details. A copy of the GPL
+  may be found at http://www.gnu.org/copyleft/lgpl.html
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+*/
+
+package digilib.image;
+
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.servlet.ServletException;
+
+import org.apache.log4j.Logger;
+
+import digilib.io.FileOpException;
+import digilib.io.ImageInput;
+import digilib.util.ImageSize;
+
+/** Simple abstract implementation of the <code>DocuImage</code> interface.
+ *
+ * This implementation provides basic functionality for the utility methods like
+ * <code>getKnownFileTypes</code>. Image methods like
+ * <code>loadImage</code>, <code>writeImage</code>, <code>getWidth</code>,
+ * <code>getHeight</code>, <code>crop</code> and <code>scale</code> must be
+ * implemented by derived classes.
+ */
+public abstract class DocuImageImpl implements DocuImage {
+
+	/** logger */
+	protected static final Logger logger = Logger.getLogger(DocuImage.class);
+	
+	/** Interpolation quality. */
+	protected int quality = 0;
+	
+	/** epsilon for float comparisons. */
+	public static final double epsilon = 1e-5;
+
+	/** image size */
+    protected ImageSize imgSize = null;
+
+    /** ImageInput that was read */
+    protected ImageInput input;
+
+	/**
+	 * Returns the quality.
+	 * @return int
+	 */
+	public int getQuality() {
+		return quality;
+	}
+
+	/**
+	 * Sets the quality.
+	 * @param quality The quality to set
+	 */
+	public void setQuality(int quality) {
+		this.quality = quality;
+	}
+
+	/** Crop and scale the current image.
+	 *
+	 * The current image is cropped to a rectangle of width, height at position
+	 * x_off, y_off. The resulting image is scaled by the factor scale using the
+	 * interpolation quality qual (0=worst).
+	 * 
+	 * @param x_off X offset of the crop rectangle in pixel.
+	 * @param y_off Y offset of the crop rectangle in pixel.
+	 * @param width Width of the crop rectangle in pixel.
+	 * @param height Height of the crop rectangle in pixel.
+	 * @param scale Scaling factor.
+	 * @param qual Interpolation quality (0=worst).
+	 * @throws ImageOpException Exception thrown on any error.
+	 */
+	public void cropAndScale(
+		int x_off, int y_off, int width, int height, double scale, int qual) 
+		throws ImageOpException {
+		// default implementation: first crop, then scale
+		setQuality(qual);
+		crop(x_off, y_off, width, height);
+		scale(scale, scale);
+	}
+	
+	/* (non-Javadoc)
+	 * @see digilib.image.DocuImage#getMimetype()
+	 */
+	public String getMimetype() {
+	    if (input != null) {
+	        return input.getMimetype();
+	    }
+	    return null;
+	}
+
+    /* (non-Javadoc)
+     * @see digilib.image.DocuImage#identify(digilib.io.ImageFile)
+     */
+    public ImageInput identify(ImageInput ii) throws IOException {
+        // just a do-nothing implementation
+        return null;
+    }
+
+	public void rotate(double angle) throws ImageOpException {
+		// just a do-nothing implementation
+	}
+
+	public void mirror(double angle) throws ImageOpException {
+		// just a do-nothing implementation
+	}
+
+	public void enhance(float mult, float add) throws ImageOpException {
+		// just a do-nothing implementation
+	}
+
+	public boolean isSubimageSupported() {
+		// partial loading not supported per default
+		return false;
+	}
+
+	public void loadSubimage(ImageInput ii, Rectangle region, int subsample)
+		throws FileOpException {
+		// empty implementation
+	}
+
+	public void enhanceRGB(float[] rgbm, float[] rgba)
+		throws ImageOpException {
+		// emtpy implementation
+	}
+
+	public void colorOp(ColorOp op) throws ImageOpException {
+		// emtpy implementation
+	}
+
+	public void dispose() {
+		// emtpy implementation
+	}
+
+	public Iterator<String> getSupportedFormats() {
+		List<String> empty = new LinkedList<String>();
+		return empty.iterator();
+	}
+
+    public void crop(int xoff, int yoff, int width, int height)
+            throws ImageOpException {
+        // emtpy implementation
+    }
+
+    public Image getAwtImage() {
+        // emtpy implementation
+        return null;
+    }
+
+    public int getHeight() {
+        ImageSize is = getSize();
+        if (is != null) {
+            return is.getHeight();
+        }
+        return 0;
+    }
+
+    public int getWidth() {
+        ImageSize is = getSize();
+        if (is != null) {
+            return is.getWidth();
+        }
+        return 0;
+    }
+
+    public ImageSize getSize() {
+        return imgSize;
+    }
+
+    public abstract void loadImage(ImageInput ii) throws FileOpException;
+
+    public abstract void scale(double scaleX, double scaleY) throws ImageOpException;
+
+    public abstract void writeImage(String mt, OutputStream ostream)
+            throws ServletException, ImageOpException;
+
+	
+}