| 1 7 8 package javax.imageio; 9 10 import java.awt.Point ; 11 import java.awt.Rectangle ; 12 import java.awt.image.BufferedImage ; 13 import java.awt.image.Raster ; 14 import java.awt.image.RenderedImage ; 15 import java.io.IOException ; 16 import java.util.ArrayList ; 17 import java.util.Iterator ; 18 import java.util.List ; 19 import java.util.Locale ; 20 import java.util.MissingResourceException ; 21 import java.util.ResourceBundle ; 22 import java.util.Set ; 23 import javax.imageio.spi.ImageReaderSpi ; 24 import javax.imageio.event.IIOReadWarningListener ; 25 import javax.imageio.event.IIOReadProgressListener ; 26 import javax.imageio.event.IIOReadUpdateListener ; 27 import javax.imageio.metadata.IIOMetadata ; 28 import javax.imageio.metadata.IIOMetadataFormatImpl ; 29 import javax.imageio.stream.ImageInputStream ; 30 31 56 public abstract class ImageReader { 57 58 63 protected ImageReaderSpi originatingProvider; 64 65 71 protected Object input = null; 72 73 81 protected boolean seekForwardOnly = false; 82 83 90 protected boolean ignoreMetadata = false; 91 92 102 protected int minIndex = 0; 103 104 109 protected Locale [] availableLocales = null; 110 111 115 protected Locale locale = null; 116 117 123 protected List <IIOReadWarningListener > warningListeners = null; 124 125 131 protected List <Locale > warningLocales = null; 132 133 139 protected List <IIOReadProgressListener > progressListeners = null; 140 141 147 protected List <IIOReadUpdateListener > updateListeners = null; 148 149 153 private boolean abortFlag = false; 154 155 168 protected ImageReader(ImageReaderSpi originatingProvider) { 169 this.originatingProvider = originatingProvider; 170 } 171 172 187 public String getFormatName() throws IOException { 188 return originatingProvider.getFormatNames()[0]; 189 } 190 191 199 public ImageReaderSpi getOriginatingProvider() { 200 return originatingProvider; 201 } 202 203 271 public void setInput(Object input, 272 boolean seekForwardOnly, 273 boolean ignoreMetadata) { 274 if (input != null) { 275 boolean found = false; 276 if (originatingProvider != null) { 277 Class [] classes = originatingProvider.getInputTypes(); 278 for (int i = 0; i < classes.length; i++) { 279 if (classes[i].isInstance(input)) { 280 found = true; 281 break; 282 } 283 } 284 } else { 285 if (input instanceof ImageInputStream ) { 286 found = true; 287 } 288 } 289 if (!found) { 290 throw new IllegalArgumentException ("Incorrect input type!"); 291 } 292 293 this.seekForwardOnly = seekForwardOnly; 294 this.ignoreMetadata = ignoreMetadata; 295 this.minIndex = 0; 296 } 297 298 this.input = input; 299 } 300 301 336 public void setInput(Object input, 337 boolean seekForwardOnly) { 338 setInput(input, seekForwardOnly, false); 339 } 340 341 362 public void setInput(Object input) { 363 setInput(input, false, false); 364 } 365 366 377 public Object getInput() { 378 return input; 379 } 380 381 392 public boolean isSeekForwardOnly() { 393 return seekForwardOnly; 394 } 395 396 406 public boolean isIgnoringMetadata() { 407 return ignoreMetadata; 408 } 409 410 420 public int getMinIndex() { 421 return minIndex; 422 } 423 424 426 439 public Locale [] getAvailableLocales() { 440 if (availableLocales == null) { 441 return null; 442 } else { 443 return (Locale [])availableLocales.clone(); 444 } 445 } 446 447 462 public void setLocale(Locale locale) { 463 if (locale != null) { 464 Locale [] locales = getAvailableLocales(); 465 boolean found = false; 466 if (locales != null) { 467 for (int i = 0; i < locales.length; i++) { 468 if (locale.equals(locales[i])) { 469 found = true; 470 break; 471 } 472 } 473 } 474 if (!found) { 475 throw new IllegalArgumentException ("Invalid locale!"); 476 } 477 } 478 this.locale = locale; 479 } 480 481 489 public Locale getLocale() { 490 return locale; 491 } 492 493 495 532 public abstract int getNumImages(boolean allowSearch) throws IOException ; 533 534 551 public abstract int getWidth(int imageIndex) throws IOException ; 552 553 570 public abstract int getHeight(int imageIndex) throws IOException ; 571 572 611 public boolean isRandomAccessEasy(int imageIndex) throws IOException { 612 return false; 613 } 614 615 636 public float getAspectRatio(int imageIndex) throws IOException { 637 return (float)getWidth(imageIndex)/getHeight(imageIndex); 638 } 639 640 663 public ImageTypeSpecifier getRawImageType(int imageIndex) 664 throws IOException { 665 return (ImageTypeSpecifier )getImageTypes(imageIndex).next(); 666 } 667 668 696 public abstract Iterator <ImageTypeSpecifier > 697 getImageTypes(int imageIndex) throws IOException ; 698 699 714 public ImageReadParam getDefaultReadParam() { 715 return new ImageReadParam (); 716 } 717 718 729 public abstract IIOMetadata getStreamMetadata() throws IOException ; 730 731 772 public IIOMetadata getStreamMetadata(String formatName, 773 Set <String > nodeNames) 774 throws IOException  775 { 776 return getMetadata(formatName, nodeNames, true, 0); 777 } 778 779 private IIOMetadata getMetadata(String formatName, 780 Set nodeNames, 781 boolean wantStream, 782 int imageIndex) throws IOException { 783 if (formatName == null) { 784 throw new IllegalArgumentException ("formatName == null!"); 785 } 786 if (nodeNames == null) { 787 throw new IllegalArgumentException ("nodeNames == null!"); 788 } 789 IIOMetadata metadata = 790 wantStream 791 ? getStreamMetadata() 792 : getImageMetadata(imageIndex); 793 if (metadata != null) { 794 if (metadata.isStandardMetadataFormatSupported() && 795 formatName.equals 796 (IIOMetadataFormatImpl.standardMetadataFormatName)) { 797 return metadata; 798 } 799 String nativeName = metadata.getNativeMetadataFormatName(); 800 if (nativeName != null && formatName.equals(nativeName)) { 801 return metadata; 802 } 803 String [] extraNames = metadata.getExtraMetadataFormatNames(); 804 if (extraNames != null) { 805 for (int i = 0; i < extraNames.length; i++) { 806 if (formatName.equals(extraNames[i])) { 807 return metadata; 808 } 809 } 810 } 811 } 812 return null; 813 } 814 815 833 public abstract IIOMetadata getImageMetadata(int imageIndex) 834 throws IOException ; 835 836 883 public IIOMetadata getImageMetadata(int imageIndex, 884 String formatName, 885 Set <String > nodeNames) 886 throws IOException { 887 return getMetadata(formatName, nodeNames, false, imageIndex); 888 } 889 890 |