comparison servlet/src/digilib/image/JAIImageLoaderDocuImage.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 4e6757e8ccd4
children f52a7664a807
comparison
equal deleted inserted replaced
88:398d39ee1014 89:6d35c945a5d6
18 18
19 */ 19 */
20 20
21 package digilib.image; 21 package digilib.image;
22 22
23 import java.awt.Dimension;
23 import java.awt.Rectangle; 24 import java.awt.Rectangle;
24 import java.awt.image.renderable.ParameterBlock; 25 import java.awt.image.renderable.ParameterBlock;
25 import java.io.File; 26 import java.io.File;
26 import java.io.IOException; 27 import java.io.IOException;
27 import java.io.OutputStream; 28 import java.io.OutputStream;
29 import java.io.RandomAccessFile;
28 import java.util.Iterator; 30 import java.util.Iterator;
29 31
30 import javax.imageio.ImageIO; 32 import javax.imageio.ImageIO;
31 import javax.imageio.ImageReadParam; 33 import javax.imageio.ImageReadParam;
32 import javax.imageio.ImageReader; 34 import javax.imageio.ImageReader;
33 import javax.imageio.stream.ImageInputStream; 35 import javax.imageio.stream.ImageInputStream;
34 import javax.media.jai.JAI; 36 import javax.media.jai.JAI;
37 import javax.media.jai.ParameterBlockJAI;
35 38
36 import com.sun.media.jai.operator.ImageReadDescriptor; 39 import digilib.io.DocuFile;
37
38 import digilib.io.FileOpException; 40 import digilib.io.FileOpException;
41 import digilib.io.FileOps;
39 42
40 /** DocuImage implementation using the Java Advanced Imaging API and the ImageLoader 43 /** DocuImage implementation using the Java Advanced Imaging API and the ImageLoader
41 * API of Java 1.4. 44 * API of Java 1.4.
42 */ 45 */
43 public class JAIImageLoaderDocuImage extends JAIDocuImage { 46 public class JAIImageLoaderDocuImage extends JAIDocuImage {
44 47
45 // ImageIO image reader 48 /** ImageIO image reader */
46 ImageReader reader; 49 protected ImageReader reader;
47 50 /** current image file */
48 /* preload is supported. */ 51 protected File imgFile;
49 public boolean isPreloadSupported() {
50 return true;
51 }
52 52
53 /* loadSubimage is supported. */ 53 /* loadSubimage is supported. */
54 public boolean isSubimageSupported() { 54 public boolean isSubimageSupported() {
55 return true; 55 return true;
56 } 56 }
96 /* Load an image file into the Object. */ 96 /* Load an image file into the Object. */
97 public void loadSubimage(File f, Rectangle region, int prescale) 97 public void loadSubimage(File f, Rectangle region, int prescale)
98 throws FileOpException { 98 throws FileOpException {
99 System.gc(); 99 System.gc();
100 try { 100 try {
101 if (reader == null) { 101 if ((reader == null) || (imgFile != f)) {
102 preloadImage(f); 102 preloadImage(f);
103 } 103 }
104 ImageInputStream istream = (ImageInputStream) reader.getInput(); 104 ImageInputStream istream = (ImageInputStream) reader.getInput();
105 ImageReadParam readParam = reader.getDefaultReadParam(); 105 ImageReadParam readParam = reader.getDefaultReadParam();
106 readParam.setSourceRegion(region); 106 readParam.setSourceRegion(region);
107 readParam.setSourceSubsampling(prescale, prescale, 0, 0); 107 readParam.setSourceSubsampling(prescale, prescale, 0, 0);
108 /* Parameter for ImageRead operation: 108 ParameterBlockJAI pb = new ParameterBlockJAI("imageread");
109 Input, ImageChoice, ReadMetadata, ReadThumbnails, VerifyInput, 109 pb.setParameter("Input", istream);
110 Listeners, Locale, ReadParam, Reader, RenderingHints 110 pb.setParameter("ReadParam", readParam);
111 */ 111 pb.setParameter("Reader", reader);
112 img = 112 img = JAI.create("imageread", pb);
113 ImageReadDescriptor.create(
114 istream,
115 new Integer(0),
116 Boolean.TRUE,
117 Boolean.FALSE,
118 Boolean.FALSE,
119 null,
120 null,
121 readParam,
122 reader,
123 null);
124 } catch (IOException e) { 113 } catch (IOException e) {
125 util.dprintln(3, "ERROR(loadImage): unable to load file"); 114 util.dprintln(3, "ERROR(loadImage): unable to load file");
126 throw new FileOpException("Unable to load File!"); 115 throw new FileOpException("Unable to load File!");
127 } 116 }
128 if (img == null) { 117 if (img == null) {
129 util.dprintln(3, "ERROR(loadImage): unable to load file"); 118 util.dprintln(3, "ERROR(loadImage): unable to load file");
130 throw new FileOpException("Unable to load File!"); 119 throw new FileOpException("Unable to load File!");
131 } 120 }
121 imgFile = f;
132 } 122 }
133 123
134 /* Get an ImageReader for the image file. */ 124 /* Get an ImageReader for the image file. */
135 public void preloadImage(File f) throws FileOpException { 125 public void preloadImage(File f) throws IOException {
136 System.gc(); 126 System.gc();
137 try { 127 RandomAccessFile rf = new RandomAccessFile(f, "r");
138 ImageInputStream istream = ImageIO.createImageInputStream(f); 128 ImageInputStream istream = ImageIO.createImageInputStream(rf);
139 Iterator readers = ImageIO.getImageReaders(istream); 129 Iterator readers = ImageIO.getImageReaders(istream);
140 reader = (ImageReader) readers.next(); 130 reader = (ImageReader) readers.next();
141 reader.setInput(istream); 131 reader.setInput(istream);
142 } catch (IOException e) {
143 util.dprintln(3, "ERROR(loadImage): unable to load file");
144 throw new FileOpException("Unable to load File!" + e);
145 }
146 if (reader == null) { 132 if (reader == null) {
147 util.dprintln(3, "ERROR(loadImage): unable to load file"); 133 util.dprintln(3, "ERROR(loadImage): unable to load file");
148 throw new FileOpException("Unable to load File!"); 134 throw new FileOpException("Unable to load File!");
149 } 135 }
150 } 136 }
172 } catch (IOException e) { 158 } catch (IOException e) {
173 throw new FileOpException("Error writing image."); 159 throw new FileOpException("Error writing image.");
174 } 160 }
175 } 161 }
176 162
163 /* (non-Javadoc)
164 * @see digilib.image.DocuImage#checkFile(digilib.io.DocuFile)
165 */
166 public boolean checkFile(DocuFile f) throws IOException {
167 // see if f is already loaded
168 if ((reader == null) || (imgFile != f.getFile())) {
169 preloadImage(f.getFile());
170 }
171 Dimension d = new Dimension();
172 d.setSize(reader.getWidth(0), reader.getHeight(0));
173 f.setSize(d);
174 // String t = reader.getFormatName();
175 String t = FileOps.mimeForFile(f.getFile());
176 f.setMimetype(t);
177 f.setChecked(true);
178 return true;
179 }
180
177 } 181 }