Mercurial > hg > digilib-old
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 } |