comparison servlet/src/digilib/image/ImageLoaderDocuImage.java @ 89:6d35c945a5d6

New version 1.8b4. ImageLoader uses RandomAccessFile to setup ImageInputStream.
author robcast
date Mon, 17 Mar 2003 15:28:13 +0100
parents 997ba69afb81
children 78f52a1876fe
comparison
equal deleted inserted replaced
88:398d39ee1014 89:6d35c945a5d6
27 import java.awt.image.BufferedImage; 27 import java.awt.image.BufferedImage;
28 import java.awt.image.RescaleOp; 28 import java.awt.image.RescaleOp;
29 import java.io.File; 29 import java.io.File;
30 import java.io.IOException; 30 import java.io.IOException;
31 import java.io.OutputStream; 31 import java.io.OutputStream;
32 import java.io.RandomAccessFile;
32 import java.util.Iterator; 33 import java.util.Iterator;
33 34
34 import javax.imageio.ImageIO; 35 import javax.imageio.ImageIO;
35 import javax.imageio.ImageReadParam; 36 import javax.imageio.ImageReadParam;
36 import javax.imageio.ImageReader; 37 import javax.imageio.ImageReader;
113 } 114 }
114 115
115 /** Get an ImageReader for the image file. 116 /** Get an ImageReader for the image file.
116 * 117 *
117 */ 118 */
118 public void preloadImage(File f) throws FileOpException { 119 public void preloadImage(File f) throws IOException {
119 System.gc(); 120 System.gc();
120 try { 121 RandomAccessFile rf = new RandomAccessFile(f, "r");
121 ImageInputStream istream = ImageIO.createImageInputStream(f); 122 ImageInputStream istream = ImageIO.createImageInputStream(rf);
122 Iterator readers = ImageIO.getImageReaders(istream); 123 Iterator readers = ImageIO.getImageReaders(istream);
123 reader = (ImageReader) readers.next(); 124 reader = (ImageReader) readers.next();
124 reader.setInput(istream); 125 reader.setInput(istream);
125 } catch (IOException e) {
126 util.dprintln(3, "ERROR(loadImage): unable to load file");
127 throw new FileOpException("Unable to load File!" + e);
128 }
129 if (reader == null) { 126 if (reader == null) {
130 util.dprintln(3, "ERROR(loadImage): unable to load file"); 127 util.dprintln(3, "ERROR(loadImage): unable to load file");
131 throw new FileOpException("Unable to load File!"); 128 throw new FileOpException("Unable to load File!");
132 } 129 }
133 imgFile = f; 130 imgFile = f;
256 "ERROR(enhance): unknown number of color bands or coefficients (" 253 "ERROR(enhance): unknown number of color bands or coefficients ("
257 + ncol 254 + ncol
258 + ")"); 255 + ")");
259 return; 256 return;
260 } 257 }
261 RescaleOp scaleOp = new RescaleOp(rgbOrdered(rgbm), rgbOrdered(rgba), null); 258 RescaleOp scaleOp =
259 new RescaleOp(rgbOrdered(rgbm), rgbOrdered(rgba), null);
262 scaleOp.filter(img, img); 260 scaleOp.filter(img, img);
263 } 261 }
264 262
265 /** Ensures that the array f is in the right order to map the images RGB components. 263 /** Ensures that the array f is in the right order to map the images RGB components.
266 */ 264 */
278 fb = fa; 276 fb = fa;
279 } 277 }
280 return fb; 278 return fb;
281 } 279 }
282 280
283 public void rotate(double angle) throws ImageOpException { 281 public void rotate(double angle) throws ImageOpException {
284 // setup rotation 282 // setup rotation
285 double rangle = Math.toRadians(angle); 283 double rangle = Math.toRadians(angle);
286 double x = getWidth() / 2; 284 double x = getWidth() / 2;
287 double y = getHeight() / 2; 285 double y = getHeight() / 2;
288 AffineTransformOp rotOp = 286 AffineTransformOp rotOp =
289 new AffineTransformOp( 287 new AffineTransformOp(
290 AffineTransform.getRotateInstance(rangle, x, y), 288 AffineTransform.getRotateInstance(rangle, x, y),
291 interpol); 289 interpol);
292 BufferedImage rotImg = rotOp.filter(img, null); 290 BufferedImage rotImg = rotOp.filter(img, null);
293 291
294 if (rotImg == null) { 292 if (rotImg == null) {
295 util.dprintln(2, "ERROR: error in rotate"); 293 util.dprintln(2, "ERROR: error in rotate");
296 throw new ImageOpException("Unable to rotate"); 294 throw new ImageOpException("Unable to rotate");
297 } 295 }
298 img = rotImg; 296 img = rotImg;
297 }
298
299 public void mirror(double angle) throws ImageOpException {
300 // setup mirror
301 double mx = 1;
302 double my = 1;
303 double tx = 0;
304 double ty = 0;
305 if (Math.abs(angle - 0) < epsilon) {
306 // 0 degree
307 mx = -1;
308 tx = getWidth();
309 } else if (Math.abs(angle - 90) < epsilon) {
310 // 90 degree
311 my = -1;
312 ty = getHeight();
313 } else if (Math.abs(angle - 180) < epsilon) {
314 // 180 degree
315 mx = -1;
316 tx = getWidth();
317 } else if (Math.abs(angle - 270) < epsilon) {
318 // 270 degree
319 my = -1;
320 ty = getHeight();
321 } else if (Math.abs(angle - 360) < epsilon) {
322 // 360 degree
323 mx = -1;
324 tx = getWidth();
325 }
326 AffineTransformOp mirOp =
327 new AffineTransformOp(
328 new AffineTransform(mx, 0, 0, my, tx, ty),
329 interpol);
330 BufferedImage mirImg = mirOp.filter(img, null);
331
332 if (mirImg == null) {
333 util.dprintln(2, "ERROR: error in mirror");
334 throw new ImageOpException("Unable to mirror");
335 }
336 img = mirImg;
337 }
338
339 /* check image size and type and store in DocuFile f */
340 public boolean checkFile(DocuFile f) throws IOException {
341 // see if f is already loaded
342 if ((reader == null) || (imgFile != f.getFile())) {
343 preloadImage(f.getFile());
344 }
345 Dimension d = new Dimension();
346 d.setSize(reader.getWidth(0), reader.getHeight(0));
347 f.setSize(d);
348 String t = reader.getFormatName();
349 t = FileOps.mimeForFile(f.getFile());
350 f.setMimetype(t);
351 f.setChecked(true);
352 return true;
353 }
354
299 } 355 }
300
301 public void mirror(double angle) throws ImageOpException {
302 // setup mirror
303 double mx = 1;
304 double my = 1;
305 double tx = 0;
306 double ty = 0;
307 if (Math.abs(angle - 0) < epsilon) {
308 // 0 degree
309 mx = -1;
310 tx = getWidth();
311 } else if (Math.abs(angle - 90) < epsilon) {
312 // 90 degree
313 my = -1;
314 ty = getHeight();
315 } else if (Math.abs(angle - 180) < epsilon) {
316 // 180 degree
317 mx = -1;
318 tx = getWidth();
319 } else if (Math.abs(angle - 270) < epsilon) {
320 // 270 degree
321 my = -1;
322 ty = getHeight();
323 } else if (Math.abs(angle - 360) < epsilon) {
324 // 360 degree
325 mx = -1;
326 tx = getWidth();
327 }
328 AffineTransformOp mirOp =
329 new AffineTransformOp(
330 new AffineTransform(mx, 0, 0, my, tx, ty),
331 interpol);
332 BufferedImage mirImg = mirOp.filter(img, null);
333
334 if (mirImg == null) {
335 util.dprintln(2, "ERROR: error in mirror");
336 throw new ImageOpException("Unable to mirror");
337 }
338 img = mirImg;
339 }
340
341 /* check image size and type and store in DocuFile f */
342 public boolean checkFile(DocuFile f) throws IOException {
343 // see if f is already loaded
344 if ((reader == null) || (imgFile != f.getFile())) {
345 preloadImage(f.getFile());
346 }
347 Dimension d = new Dimension();
348 d.setSize(reader.getWidth(0), reader.getHeight(0));
349 f.setSize(d);
350 // String t = reader.getFormatName();
351 String t = FileOps.mimeForFile(f.getFile());
352 f.setMimetype(t);
353 f.setChecked(true);
354 return true;
355 }
356
357 }