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