Mercurial > hg > digilib-old
comparison common/src/main/java/digilib/image/DocuImageImpl.java @ 1032:4e368c85cce4
CLOSED - # 22: wrong contrast setting. dito #23 (at least on OSX 10.7)
mostly juggling color channels.
also separate version number for DocuImage class.
| author | robcast |
|---|---|
| date | Sat, 10 Mar 2012 23:09:38 +0100 |
| parents | 28d007673346 |
| children |
comparison
equal
deleted
inserted
replaced
| 1031:e077f52205a7 | 1032:4e368c85cce4 |
|---|---|
| 14 | 14 |
| 15 You should have received a copy of the GNU General Public License | 15 You should have received a copy of the GNU General Public License |
| 16 along with this program; if not, write to the Free Software | 16 along with this program; if not, write to the Free Software |
| 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 18 | 18 |
| 19 */ | 19 */ |
| 20 | 20 |
| 21 package digilib.image; | 21 package digilib.image; |
| 22 | 22 |
| 23 import java.awt.Image; | 23 import java.awt.Image; |
| 24 import java.awt.Rectangle; | 24 import java.awt.Rectangle; |
| 26 import java.io.OutputStream; | 26 import java.io.OutputStream; |
| 27 import java.util.Iterator; | 27 import java.util.Iterator; |
| 28 import java.util.LinkedList; | 28 import java.util.LinkedList; |
| 29 import java.util.List; | 29 import java.util.List; |
| 30 | 30 |
| 31 | |
| 32 import org.apache.log4j.Logger; | 31 import org.apache.log4j.Logger; |
| 33 | 32 |
| 34 import digilib.io.FileOpException; | 33 import digilib.io.FileOpException; |
| 35 import digilib.io.ImageInput; | 34 import digilib.io.ImageInput; |
| 36 import digilib.util.ImageSize; | 35 import digilib.util.ImageSize; |
| 37 | 36 |
| 38 /** Simple abstract implementation of the <code>DocuImage</code> interface. | 37 /** |
| 39 * | 38 * Simple abstract implementation of the <code>DocuImage</code> interface. |
| 39 * | |
| 40 * This implementation provides basic functionality for the utility methods like | 40 * This implementation provides basic functionality for the utility methods like |
| 41 * <code>getKnownFileTypes</code>. Image methods like | 41 * <code>getKnownFileTypes</code>. Image methods like <code>loadImage</code>, |
| 42 * <code>loadImage</code>, <code>writeImage</code>, <code>getWidth</code>, | 42 * <code>writeImage</code>, <code>getWidth</code>, <code>getHeight</code>, |
| 43 * <code>getHeight</code>, <code>crop</code> and <code>scale</code> must be | 43 * <code>crop</code> and <code>scale</code> must be implemented by derived |
| 44 * implemented by derived classes. | 44 * classes. |
| 45 */ | 45 */ |
| 46 public abstract class DocuImageImpl implements DocuImage { | 46 public abstract class DocuImageImpl implements DocuImage { |
| 47 | 47 |
| 48 /** logger */ | 48 /** DocuImage version */ |
| 49 protected static final Logger logger = Logger.getLogger(DocuImage.class); | 49 public static final String version = "DocuImageImpl 2.1"; |
| 50 | 50 |
| 51 /** Interpolation quality. */ | 51 /** logger */ |
| 52 protected int quality = 0; | 52 protected static final Logger logger = Logger.getLogger(DocuImage.class); |
| 53 | 53 |
| 54 /** epsilon for float comparisons. */ | 54 /** Interpolation quality. */ |
| 55 public static final double epsilon = 1e-5; | 55 protected int quality = 0; |
| 56 | 56 |
| 57 /** image size */ | 57 /** epsilon for float comparisons. */ |
| 58 public static final double epsilon = 1e-5; | |
| 59 | |
| 60 /** image size */ | |
| 58 protected ImageSize imgSize = null; | 61 protected ImageSize imgSize = null; |
| 59 | 62 |
| 60 /** ImageInput that was read */ | 63 /** ImageInput that was read */ |
| 61 protected ImageInput input; | 64 protected ImageInput input; |
| 62 | 65 |
| 63 /** | 66 /** |
| 64 * Returns the quality. | 67 * Returns the version. |
| 65 * @return int | 68 * @return the version |
| 66 */ | 69 */ |
| 67 public int getQuality() { | 70 public String getVersion() { |
| 68 return quality; | 71 return version; |
| 69 } | 72 } |
| 70 | 73 |
| 71 /** | 74 /** |
| 72 * Sets the quality. | 75 * Returns the quality. |
| 73 * @param quality The quality to set | 76 * |
| 74 */ | 77 * @return int |
| 75 public void setQuality(int quality) { | 78 */ |
| 76 this.quality = quality; | 79 public int getQuality() { |
| 77 } | 80 return quality; |
| 78 | 81 } |
| 79 /** Crop and scale the current image. | 82 |
| 80 * | 83 /** |
| 81 * The current image is cropped to a rectangle of width, height at position | 84 * Sets the quality. |
| 82 * x_off, y_off. The resulting image is scaled by the factor scale using the | 85 * |
| 83 * interpolation quality qual (0=worst). | 86 * @param quality |
| 84 * | 87 * The quality to set |
| 85 * @param x_off X offset of the crop rectangle in pixel. | 88 */ |
| 86 * @param y_off Y offset of the crop rectangle in pixel. | 89 public void setQuality(int quality) { |
| 87 * @param width Width of the crop rectangle in pixel. | 90 this.quality = quality; |
| 88 * @param height Height of the crop rectangle in pixel. | 91 } |
| 89 * @param scale Scaling factor. | 92 |
| 90 * @param qual Interpolation quality (0=worst). | 93 /** |
| 91 * @throws ImageOpException Exception thrown on any error. | 94 * Crop and scale the current image. |
| 92 */ | 95 * |
| 93 public void cropAndScale( | 96 * The current image is cropped to a rectangle of width, height at position |
| 94 int x_off, int y_off, int width, int height, double scale, int qual) | 97 * x_off, y_off. The resulting image is scaled by the factor scale using the |
| 95 throws ImageOpException { | 98 * interpolation quality qual (0=worst). |
| 96 // default implementation: first crop, then scale | 99 * |
| 97 setQuality(qual); | 100 * @param x_off |
| 98 crop(x_off, y_off, width, height); | 101 * X offset of the crop rectangle in pixel. |
| 99 scale(scale, scale); | 102 * @param y_off |
| 100 } | 103 * Y offset of the crop rectangle in pixel. |
| 101 | 104 * @param width |
| 102 /* (non-Javadoc) | 105 * Width of the crop rectangle in pixel. |
| 103 * @see digilib.image.DocuImage#getMimetype() | 106 * @param height |
| 104 */ | 107 * Height of the crop rectangle in pixel. |
| 105 public String getMimetype() { | 108 * @param scale |
| 106 if (input != null) { | 109 * Scaling factor. |
| 107 return input.getMimetype(); | 110 * @param qual |
| 108 } | 111 * Interpolation quality (0=worst). |
| 109 return null; | 112 * @throws ImageOpException |
| 110 } | 113 * Exception thrown on any error. |
| 111 | 114 */ |
| 112 /* (non-Javadoc) | 115 public void cropAndScale(int x_off, int y_off, int width, int height, double scale, int qual) throws ImageOpException { |
| 116 // default implementation: first crop, then scale | |
| 117 setQuality(qual); | |
| 118 crop(x_off, y_off, width, height); | |
| 119 scale(scale, scale); | |
| 120 } | |
| 121 | |
| 122 /* | |
| 123 * (non-Javadoc) | |
| 124 * | |
| 125 * @see digilib.image.DocuImage#getMimetype() | |
| 126 */ | |
| 127 public String getMimetype() { | |
| 128 if (input != null) { | |
| 129 return input.getMimetype(); | |
| 130 } | |
| 131 return null; | |
| 132 } | |
| 133 | |
| 134 /* | |
| 135 * (non-Javadoc) | |
| 136 * | |
| 113 * @see digilib.image.DocuImage#identify(digilib.io.ImageFile) | 137 * @see digilib.image.DocuImage#identify(digilib.io.ImageFile) |
| 114 */ | 138 */ |
| 115 public ImageInput identify(ImageInput ii) throws IOException { | 139 public ImageInput identify(ImageInput ii) throws IOException { |
| 116 // just a do-nothing implementation | 140 // just a do-nothing implementation |
| 117 return null; | 141 return null; |
| 118 } | 142 } |
| 119 | 143 |
| 120 public void rotate(double angle) throws ImageOpException { | 144 public void rotate(double angle) throws ImageOpException { |
| 121 // just a do-nothing implementation | 145 // just a do-nothing implementation |
| 122 } | 146 } |
| 123 | 147 |
| 124 public void mirror(double angle) throws ImageOpException { | 148 public void mirror(double angle) throws ImageOpException { |
| 125 // just a do-nothing implementation | 149 // just a do-nothing implementation |
| 126 } | 150 } |
| 127 | 151 |
| 128 public void enhance(float mult, float add) throws ImageOpException { | 152 public void enhance(float mult, float add) throws ImageOpException { |
| 129 // just a do-nothing implementation | 153 // just a do-nothing implementation |
| 130 } | 154 } |
| 131 | 155 |
| 132 public boolean isSubimageSupported() { | 156 public boolean isSubimageSupported() { |
| 133 // partial loading not supported per default | 157 // partial loading not supported per default |
| 134 return false; | 158 return false; |
| 135 } | 159 } |
| 136 | 160 |
| 137 public void loadSubimage(ImageInput ii, Rectangle region, int subsample) | 161 public void loadSubimage(ImageInput ii, Rectangle region, int subsample) throws FileOpException { |
| 138 throws FileOpException { | 162 // empty implementation |
| 139 // empty implementation | 163 } |
| 140 } | 164 |
| 141 | 165 public void enhanceRGB(float[] rgbm, float[] rgba) throws ImageOpException { |
| 142 public void enhanceRGB(float[] rgbm, float[] rgba) | 166 // emtpy implementation |
| 143 throws ImageOpException { | 167 } |
| 144 // emtpy implementation | 168 |
| 145 } | 169 public void colorOp(ColorOp op) throws ImageOpException { |
| 146 | 170 // emtpy implementation |
| 147 public void colorOp(ColorOp op) throws ImageOpException { | 171 } |
| 148 // emtpy implementation | 172 |
| 149 } | 173 public void dispose() { |
| 150 | 174 // emtpy implementation |
| 151 public void dispose() { | 175 } |
| 152 // emtpy implementation | 176 |
| 153 } | 177 public Iterator<String> getSupportedFormats() { |
| 154 | 178 List<String> empty = new LinkedList<String>(); |
| 155 public Iterator<String> getSupportedFormats() { | 179 return empty.iterator(); |
| 156 List<String> empty = new LinkedList<String>(); | 180 } |
| 157 return empty.iterator(); | 181 |
| 158 } | 182 public void crop(int xoff, int yoff, int width, int height) throws ImageOpException { |
| 159 | |
| 160 public void crop(int xoff, int yoff, int width, int height) | |
| 161 throws ImageOpException { | |
| 162 // emtpy implementation | 183 // emtpy implementation |
| 163 } | 184 } |
| 164 | 185 |
| 165 public Image getAwtImage() { | 186 public Image getAwtImage() { |
| 166 // emtpy implementation | 187 // emtpy implementation |
| 189 | 210 |
| 190 public abstract void loadImage(ImageInput ii) throws FileOpException; | 211 public abstract void loadImage(ImageInput ii) throws FileOpException; |
| 191 | 212 |
| 192 public abstract void scale(double scaleX, double scaleY) throws ImageOpException; | 213 public abstract void scale(double scaleX, double scaleY) throws ImageOpException; |
| 193 | 214 |
| 194 public abstract void writeImage(String mt, OutputStream ostream) | 215 public abstract void writeImage(String mt, OutputStream ostream) throws ImageOpException, FileOpException; |
| 195 throws ImageOpException, FileOpException; | 216 |
| 196 | |
| 197 | |
| 198 } | 217 } |
